如何根据其他两列创建一个列?

2024-09-30 02:36:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有两列的数据帧。我想创建第三列,如果Col1为null,那么Col3=Col2,否则Col3=Col1*2

我试过:

    def myf(col1,col2):
       if pd.isnull(col1):
          return col2
       else:
          return col1 * 2

    df['col3'] = df.apply(lambda x: myf(df['col1'], df['col2']), axis= 1)

但是我得到了一个错误“级数的真值是模糊的”

我怎样才能解决这个问题? 我知道这是一个老生常谈的问题,但我那小小的,习惯了SQL的大脑仍然在挣扎(大时刻!)了解熊猫是如何工作的;也许我很笨,也许熊猫的资料很差,也许两者都有:)

我知道apply在数据帧的行/列基础上工作,applymap在数据帧上按元素工作,map在序列上按元素工作,我知道错误是因为pd.isnull返回一个T/F数组

但是,我不确定在这样的情况下如何使用applymap或map,其中另外两列是我的输入

谢谢


Tags: 数据元素mapdfreturn错误col2col3
2条回答

需要在lambda function中将df更改为x而不是Series作为函数中的输入:

df['col3'] = df.apply(lambda x: myf(x['col1'], x['col2']), axis= 1)

另一个更快的解决方案是使用^{}^{}

df['col3'] = df['col1'].mul(2).combine_first(df['col2'])

df['Col3'] = df['col2'].where(df['col1'].isnull(), df['col1']*2)

您可以使用^{}

df.col1.mul(2).fillna(df.col2)

df = pd.DataFrame({
    'col1': [1, 2, pd.np.nan, 3, pd.np.nan],
    'col2': [2, pd.np.nan, 3, 2, pd.np.nan]
})

df['col3'] = df.col1.mul(2).fillna(df.col2)
df
#  col1   col2  col3
#0  1.0    2.0  2.0
#1  2.0    NaN  4.0
#2  NaN    3.0  3.0
#3  3.0    2.0  6.0
#4  NaN    NaN  NaN

相关问题 更多 >

    热门问题