如何对包含数组的列求和

时间:2019-06-14 21:35:34

标签: python arrays pandas dataframe sum

在汇总每个单元格中包含数组的数据框的列时遇到问题。 dataframe 我尝试使用df.sum()来汇总列,希望获得总列数组,例如列“ common”的[4,1,1,4,1]。 但是我只有一个空系列。

df_sum = df.sum()
print(df_sum)

Series([], dtype: float64)

在这种情况下如何获取汇总列?

2 个答案:

答案 0 :(得分:1)

在熊猫中使用const object数据框通常不是一个好主意,特别是用python列表填充单元,因为这样会降低性能。

不过,您可以使用itertools.chain.from_iterable

完成此操作
dtypes

您也可以使用df.apply(lambda s: list(it.chain.from_iterable(s.dropna()))) ,但我说它要慢

sum

我明白了为什么您会认为df.apply(lambda s: s.dropna().sum()) 在这里可以工作,甚至显式设置df.sum的原因,但是矢量化的skipna=True在这种情况下显示出一种奇怪的行为。但是再说一次,这些是使用带有列表的DataFrame的缺点

答案 1 :(得分:0)

IIUC,您可能仅可以使用列表理解来处理任务:

df = pd.DataFrame({'d1':[np.nan, [1,2], [4]], 'd2':[[3], np.nan, np.nan]})

>>> df
       d1   d2
0     NaN  [3]
1  [1, 2]  NaN
2     [4]  NaN

df_sum = [i for a in df['d1'] if type(a) is list for i in a]

>>> df_sum
[1, 2, 4]

如果您需要对整个DataFrame(或多列)求和,请在使用列表推导之前使用numpy.ravel()展平数据框。

df_sum = [i for a in np.ravel(df.values) if type(a) is list for i in a]

>>> df_sum
[3, 1, 2, 4]