pandas - python Pandas - 在列中,如何對出現的數組元素求和

我有以下數據幀:


import pandas as pd


df1 = pd.DataFrame([(1, 2, [1, 2, 3, 4]), 


 (1, 2, [5, 6, 7, 8])], 


 columns = ['a', 'b', 'c'])



我想對列'c '的數組元素求和,以便它們在每一行中的總和將出現在新列'd '中。但是,df1['d'] =df1['c'].sum產生以下結果:


 a b c d


0 1 2 [1, 2, 3, 4] <bound method Series.sum of 0 [1, 2, 3, 4]...


1 1 2 [5, 6, 7, 8] <bound method Series.sum of 0 [1, 2, 3, 4]...



替代:


 a b c d


 0 1 2 [1, 2, 3, 4] 10


 1 1 2 [5, 6, 7, 8] 26



我做錯什麼了?

时间:


df1['d'] = df1.c.map(sum)



print(df1)



 a b c d


0 1 2 [1, 2, 3, 4] 10


1 1 2 [5, 6, 7, 8] 26



可以使用列表推導,對每一組值求和。


>>> df1.assign(d=[sum(vals) for vals in df1['c']])


 a b c d


0 1 2 [1, 2, 3, 4] 10


1 1 2 [5, 6, 7, 8] 26



請注意,數據框列(即Series)是一個numpy數組,並且數字列表(例如列c)將作為對象類型而不是數字類型存儲。對象存儲效率不高,因此您應該強烈考慮創建一列以表示列表中的每個數字。然後,可以在選定的列上使用Pandas函數sum

例如:


df1 = df1.assign(**{k: v for k, v in zip('defg', zip(*df1['c']))})


>>> df1.assign(h=df1.loc[:, 'd':'g'].sum(axis=1))


 a b c d e f g h


0 1 2 [1, 2, 3, 4] 1 2 3 4 10


1 1 2 [5, 6, 7, 8] 5 6 7 8 26



然後你可以刪除列c,因為它不再需要。


>>> df1.assign(h=df1.loc[:, 'd':'g'].sum(axis=1)).drop('c', axis=1)


 a b d e f g h


0 1 2 1 2 3 4 10


1 1 2 5 6 7 8 26



這也應該有效:


df1['d'] = df1['c'].apply(lambda x: sum(x))



...