熊猫使用Apply功能更新多列

时间:2018-08-06 08:34:00

标签: python pandas

我正在使用功能的应用更新数据帧。

但是现在我需要使用此功能修改多列,

这是我的示例代码:

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 个答案:

答案 0 :(得分:3)

您可以返回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

答案 1 :(得分:0)

您可以使用zip输出:

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