列表中的 Pandas groupby 值
Posted
技术标签:
【中文标题】列表中的 Pandas groupby 值【英文标题】:Pandas groupby values in a list 【发布时间】:2019-09-06 01:54:12 【问题描述】:我正在尝试从 pandas
df
返回 groupby
。我希望输出值的总和不是merged
。但是下面的merges
是适当的lists
。
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 [1, 2, 3, 4, 5, 6, 7, 8, 9, 1]
2 B [5, 3, 3, 2, 1, 6, 7, 8, 9, 1]
预期输出:
Output
Id Val
1 A [7,9,11,13,6]
2 B [11,10,11,11,2]
【问题讨论】:
【参考方案1】:或者使用转换为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
【讨论】:
@Wen-Ben 谢谢,我也会为你 +1。【参考方案2】:您可以将list
更改为numpy
array
然后
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
【讨论】:
【参考方案3】:另一种使用 zip 而不是应用两次的解决方案,
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]
【讨论】:
以上是关于列表中的 Pandas groupby 值的主要内容,如果未能解决你的问题,请参考以下文章
Groupby 和 Aggregate 以列表为元素的 pandas 列,并在列表中获取唯一值
使用 apply() 函数在 pandas 中的 groupby 之后创建列表
pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值groupby.nth函数获取每个组中的最后一个值