【发布时间】:2019-02-15 18:24:15
【问题描述】:
想象一个由
给出的pandasdata 帧
df = pd.DataFrame({
'id': range(1, 10),
'mfr': ('a', 'b', 'a', 'c', 'd', 'e', 'd', 'd', 'f'),
'vmn': ('A', 'A', 'B', 'C', 'D', 'E', 'F', 'F', 'D')
})
给出下表
id mfr vmn
0 1 a A
1 2 b A
2 3 a B
3 4 c C
4 5 d D
5 6 e E
6 7 d F
7 8 d F
8 9 f D
我希望通过mfr和/或vmn分组来确定哪些id属于彼此。我可以通过使用其中一个来轻松分配组 id
df['groupby_mfr'] = df.groupby('mfr').grouper.group_info[0]
df['groupby_vmn'] = df.groupby('vmn').grouper.group_info[0]
给出以下内容
id mfr vmn groupby_mfr groupby_vmn
0 1 a A 0 0
1 2 b A 1 0
2 3 a B 0 1
3 4 c C 2 2
4 5 d D 3 3
5 6 e E 4 4
6 7 d F 3 5
7 8 d F 3 5
8 9 f D 5 3
现在我想将它组合到一个新的组 id 中,这样生成的数据框就会变成这样
id mfr vmn groupby_mfr groupby_vmn combined_group
0 1 a A 0 0 0
1 2 b A 1 0 0
2 3 a B 0 1 0
3 4 c C 2 2 1
4 5 d D 3 3 2
5 6 e E 4 4 3
6 7 d F 3 5 2
7 8 d F 3 5 2
8 9 f D 5 3 2
前两行相同,因为vmn 相等。第三个也是同一个组,因为第 3 行和第 1 行对于 vmn 是相同的。等等……
另请注意,这将在具有多行的多列上运行,因此也非常感谢性能。
【问题讨论】:
-
不清楚
combined_group是如何计算的,能否详细说明? -
似乎需要图表。我认为
networkx在这里是必要的。 -
Groupby 可以带多个标签,我认为这是最好的方法(两个标签上的 groupby 然后使用 grouper 创建一个新列。
-
@RoyShahaf 那行不通。这将比我在这里要求的更独特的群体。
-
@mr.bjerre 您可以在此处查看如何查找组:stackoverflow.com/questions/45086731/… 然后您可以创建字典并将其中一个旧列转换为组列。但是,据我所知,它仅适用于两列:/
标签: python pandas pandas-groupby