试着看看这对 Pandas 来说有多难或容易。
假设一个有两列数据,例如:
Cat1 Cat2
A 1
A 2
A 3
B 1
B 2
C 1
C 2
C 3
D 4
如您所见,A
和 C
具有三个公共(public)元素 1, 2, 3
。 B
然而只有两个元素 1 和 2。D
只有一个元素:4。
如何以编程方式获得相同的结果。这个想法是让每个小组以某种方式返回。所以一个将是 [A, C]
和 [1, 2, 3]
,然后是 [B]
和 [1, 2]
和 [D]
与 [4]
。
我知道可以编写一个程序来执行此操作,所以我想弄清楚 Pandas 上是否有可以执行此操作而无需从头开始构建的东西。
谢谢!
最佳答案
您可以使用 groupby
两次来实现此目的。
df = df.groupby('Cat1')['Cat2'].apply(lambda x: tuple(set(x))).reset_index()
df = df.groupby('Cat2')['Cat1'].apply(lambda x: tuple(set(x))).reset_index()
我正在使用 tuple
,因为 pandas 需要可散列的元素才能执行 groupby
。上面的代码没有区分(1, 2, 3)
和(1, 1, 2, 3)
。如果要进行此区分,请将 set
替换为 sorted
。
结果输出:
Cat2 Cat1
0 (1, 2) (B,)
1 (1, 2, 3) (A, C)
2 (4,) (D,)
关于python - Pandas 创建多个聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37174371/