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

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

所以我正在处理以下数据框:

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

此列应如下所示

new_column

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

提前感谢您的帮助。

您基本上可以使用 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 函数来实现。

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()

编辑:已更改以便输出为字符串格式

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)

输出:

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

使用 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