Python 在列表中按值分组
我正在尝试从Python 在列表中按值分组,python,pandas,list,group-by,Python,Pandas,List,Group By,我正在尝试从pandasdf返回groupby。我希望对输出值求和,而不是合并。但是下面的合并了相应的列表 import pandas as pd d = ({ 'Id' : [1,2,2,1], 'Val' : ['A','B','B','A'], 'Output' : [[1,2,3,4,5],[5,3,3,2,1],[6,7,8,9,1],[6,7,8,9,1]],
pandas
df
返回groupby
。我希望对输出值求和,而不是合并。但是下面的合并了相应的列表
import pandas as pd
d = ({
'Id' : [1,2,2,1],
'Val' : ['A','B','B','A'],
'Output' : [[1,2,3,4,5],[5,3,3,2,1],[6,7,8,9,1],[6,7,8,9,1]],
})
df = pd.DataFrame(data = d)
df = df.groupby(['Id','Val']).agg({'Output':'sum'}, axis = 1)
输出:
预期产出:
Output
Id Val
1 A [7,9,11,13,6]
2 B [11,10,11,11,2]
您可以将列表更改为numpy
数组
,然后
df.Output=df.Output.apply(np.array)
df.groupby(['Id','Val']).Output.apply(lambda x : np.sum(x))
Out[389]:
Id Val
1 A [7, 9, 11, 13, 6]
2 B [11, 10, 11, 11, 2]
Name: Output, dtype: object
或者使用转换为np.array
的单行程序:
df = df.groupby(['Id','Val']).apply(lambda x: x.Output.apply(np.array).sum())
print(df)
输出:
Id Val
1 A [7, 9, 11, 13, 6]
2 B [11, 10, 11, 11, 2]
dtype: object
另一个解决方案使用zip而不是两次使用apply
df.groupby(['Id','Val']).Output.apply(lambda x: [sum(i) for i in list(zip(*x))])
Id Val
1 A [7, 9, 11, 13, 6]
2 B [11, 10, 11, 11, 2]
@文本谢谢,威尔+1也为你。
df.groupby(['Id','Val']).Output.apply(lambda x: [sum(i) for i in list(zip(*x))])
Id Val
1 A [7, 9, 11, 13, 6]
2 B [11, 10, 11, 11, 2]