Pandas使用apply函数更新多列数据

8

我使用函数的apply更新数据框,但现在我需要使用这个函数修改多列。

以下是我的示例代码:

def update_row(row):
    listy = [1,2,3]
    return listy

dp_data_df[['A', 'P','Y']] = dp_data_df.apply(update_row, axis=1)

它抛出了以下错误:
ValueError: shape mismatch: value array of shape (10,) could not be broadcast to indexing result of shape (3,10)

提前感谢您。
2个回答

21
您可以返回 pd.Series
dp_data_df = pd.DataFrame({'A':[3,5,6,6],
                           'B':[6,7,8,9],
                           'P':[5,6,7,0],
                           'Y':[1,2,3,4]})
print (dp_data_df)
   A  B  P  Y
0  3  6  5  1
1  5  7  6  2
2  6  8  7  3
3  6  9  0  4

def update_row(row):
    listy = [1,2,3]
    return pd.Series(listy)

dp_data_df[['A', 'P','Y']] = dp_data_df.apply(update_row, axis=1)
print (dp_data_df)
   A  B  P  Y
0  1  6  2  3
1  1  7  2  3
2  1  8  2  3
3  1  9  2  3

@jezrael 有没有办法我可以为每个记录更改列名,同时仍然使用apply函数? - Ahsan
@Ahsan - 不确定是否理解,如何更改列名? - jezrael
@jezrael 我该如何为更新使用条件?例如,如果列B = 8或9,则我想要更新该行。 - Abu Shoeb

3
您可以使用压缩将输出打包:
def update_row(row):
    listy = [1,2,3]
    return listy

dp_data_df['A'], dp_data_df['P'], dp_data_df['Y'] = zip(*dp_data_df.apply(update_row, axis=1))

非常优雅的解决方案!您介意解释一下它是如何工作的吗? - gosuto
这个解决方案避免了数值返回并允许 char 函数的返回。它运行良好,也是我正在寻找的,但我不明白它是如何工作的。 - dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接