python - Pandas 创建多个聚合

标签 python pandas

试着看看这对 Pandas 来说有多难或容易。

假设一个有两列数据,例如:

Cat1  Cat2
A        1
A        2
A        3
B        1
B        2
C        1
C        2
C        3
D        4

如您所见,AC 具有三个公共(public)元素 1, 2, 3B 然而只有两个元素 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/

相关文章:

python - matplotlib 忽略 locator_params nticks 命令

python - 在python和tkinter中使用while循环持续更新传感器数据

python - 使用正则表达式提取某些短语,但排除后跟单词 "of"的短语

python - 我应该如何处理重叠批处理的 RQ 工作人员

python - 导入 geopandas 时出错 OSError : Could not find lib c or load any of its variants []

python - 计算时间差(以分钟为单位)

python - Pandas 模式 ='a',if_sheet_exists ='overlay' 不起作用

Python Pandas 仅合并某些列

python - 如何从数据框中创建一个列表,其中包含字符串列的每个值乘以第二列?

python - 仅在 Pandas 中保留有限条目