我正在使用pandas groupby并希望应用该功能从组中的项目创建一个集合.
以下不起作用:
df = df.groupby('col1')['col2'].agg({'size': len, 'set': set})
Run Code Online (Sandbox Code Playgroud)
但以下工作:
def to_set(x):
return set(x)
df = df.groupby('col1')['col2'].agg({'size': len, 'set': to_set})
Run Code Online (Sandbox Code Playgroud)
在我的理解中,这两个表达式是相似的,第一个不起作用的原因是什么?
这是一个数据帧:
A B C
0 6 2 -5
1 2 5 2
2 10 3 1
3 -5 2 8
4 3 6 2
Run Code Online (Sandbox Code Playgroud)
我可以检索一个列,它基本上是原始列的元组df使用df.apply:
out = df.apply(tuple, 1)
print(out)
0 (6, 2, -5)
1 (2, 5, 2)
2 (10, 3, 1)
3 (-5, 2, 8)
4 (3, 6, 2)
dtype: object
Run Code Online (Sandbox Code Playgroud)
但是,如果我想要一个值列表而不是它们的元组,我不能这样做,因为它没有给我我期望的东西:
out = df.apply(list, 1)
print(out)
A B C
0 6 2 -5
1 2 5 2
2 10 3 1
3 -5 2 …Run Code Online (Sandbox Code Playgroud) 我有这个数据框
x = pd.DataFrame.from_dict({'cat1':['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'], 'cat2':['X', 'X', 'Y', 'Y', 'Y', 'Y', 'Z', 'Z']})
cat1 cat2
0 A X
1 A X
2 A Y
3 B Y
4 B Y
5 C Y
6 C Z
7 C Z
Run Code Online (Sandbox Code Playgroud)
我想分组cat1,然后聚合cat2为不同值的集合,例如
cat1 cat2
0 A (X, Y)
1 B (Y,)
2 C (Y, Z)
Run Code Online (Sandbox Code Playgroud)
这是具有更多列的更大数据框的一部分,每个列都有自己的聚合函数,那么如何将此功能传递给聚合字典?