繁体   English   中英

如何将一些单元格值从 Pandas DF 中的 2 列移动到另一个新列?

[英]How do I move some cell values from 2 columns in Pandas DF to another new column?

所以我正在研究以下 dataframe:

东风

我要做的是将2列('elected_in'和'campaigned_in_')的数值合并到一个新列中。

此列应如下所示

新列

  • 007
  • 043
  • 275
  • 027
  • ETC

关于如何做到这一点的任何提示? 发现所有与此不太相关的堆栈溢出答案,我也不确定使用什么术语......

提前感谢您的帮助。

您基本上可以使用new列将它们组合起来。 我建议这样做,因为您在尝试合并的列中都有数字和字符串作为值。 请参考下面的代码。

import pandas as pd

df = pd.DataFrame(np.array([[7, "Bremen", "test"], [4, 5, 6], ["trial", 8, 43]]),
                   columns=['elected', 'b', 'campained'])

在此处输入图像描述

# Now combine them
df['number'] = df['elected'] + " " +df['campained']
df.head()

在此处输入图像描述

如果您只想要数字,那么您可以使用简单lambda function 来做到这一点。

import re as re

def find_number(text):
    num = re.findall(r'[0-9]+',text)
    return " ".join(num)

df['new']=df['number'].apply(lambda x: find_number(x))
df.head()

在此处输入图像描述

使用iterrows()方法迭代行并根据条件替换值(如果campaigned_in中的值是字符串,则替换为来自elected_in的值)

import pandas as pd
df = pd.DataFrame({"elected_in" : [0.07, "Bremen", "Nied"]})
df['campaigned_in'] = ["Schleswig",45,275]
df["answer"]=df["campaigned_in"]
for index, row in df.iterrows(): 
  if(isinstance(row["campaigned_in"],str)==True):
    row["answer"]=row["elected_in"]
df.head()

更新的 df 看起来像:

    elected_in  campaigned_in   answer
0   0.07        Schleswig       0.07
1   Bremen      45              45
2   Nied        275             275

编辑:更改为 output 是字符串格式

def merge(e,c):
    if str(e).isnumeric(): 
        return e     
    elif str(c).isnumeric():
        return c
    else:
        return np.nan

data = {'elected_in':['007', 'Bremen', 'test1', 182],
         'campaigned_in_':['sh-h', np.nan, '043', 'test2']
       }
df = pd.DataFrame(data)
df['new_column'] = df.apply(lambda x: merge(x.elected_in, x.campaigned_in_), axis = 1)

output:

elected_in  campaigned_in_  new_column
0   007        sh-h         007
1   Bremen     NaN          NaN
2   test1      043          043
3   182        test2        182

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM