汇总熊猫数据框中的列,其中每个单元格值都是一个列表

时间:2020-11-03 18:54:11

标签: python pandas sum

我有一个单列数据框,类似于下面的示例:

import pandas
df = pandas.DataFrame({'Column': [[10, 100],[20, 200],[30, 300]]})

     Column
0 [10, 100]
1 [20, 200]
2 [30, 300]

如何逐个元素添加行,这样结果将是:

     Column
0 [60, 600]

3 个答案:

答案 0 :(得分:0)

假定所有数组的大小与示例数据中的大小相同:

np.array(df['Column'].to_list()).sum(axis=0)

输出:

array([ 60, 600])

答案 1 :(得分:0)

我将发布此答案,因为您可能根本不想使用numpy。您可以使用以下代码段获得所需的结果:

import pandas
df = pandas.DataFrame({'Column': [[10, 100],[20, 200],[30, 300]]})

def nth_element(n,lis):
  return [x[n] for x in lis]

df = pandas.DataFrame({'Column': [list(map(sum,[nth_element(0,df['Column']),nth_element(1,df['Column'])]))]})
print(df)

输出为:

      Column
0  [60, 600]

在这里,我们使用辅助函数'nth_element'获得列表列表(矩阵)的内部列表的第n个元素。然后,我们得到一个列表,其内部列表是您原始矩阵的列,然后我们使用地图对每个列表(在您的情况下为2)执行总和,最后将其从地图基元转换为列出并将其保存在另一个数据框中。此过程很容易成为一个功能(以防您多次需要执行此操作):

def sum_elements_of(column,dataframe):
    results = []
    data = list(dataframe[column])
    for n in range(len(data[0])):
        results.append([x[n] for x in data])
    results = list(map(sum,results))
    return pandas.DataFrame({column:[results]})

答案 2 :(得分:0)

我建议应用功能。尝试这种方式:

Import pandas as pd
df = pd.DataFrame({'Column': [[10, 100],[20, 200],[30, 300]]})
nums = df.Column.apply(pd.Series)
nums.sum()