Python 对数据帧进行分组
有人能分享一下他们是如何对以下数据帧进行分组的吗? 当我尝试这样做时,我最终会摆弄groupby、stacks和lambda函数,但从未真正做到这一点。文档中的哪些方法和示例对我正在尝试的工作很有帮助,这一点并不明显 这些东西会随着经验变得更直观吗?感谢任何关于如何选择和更流利地使用Pandas函数的提示或建议 以下是虚拟数据:Python 对数据帧进行分组,python,pandas,Python,Pandas,有人能分享一下他们是如何对以下数据帧进行分组的吗? 当我尝试这样做时,我最终会摆弄groupby、stacks和lambda函数,但从未真正做到这一点。文档中的哪些方法和示例对我正在尝试的工作很有帮助,这一点并不明显 这些东西会随着经验变得更直观吗?感谢任何关于如何选择和更流利地使用Pandas函数的提示或建议 以下是虚拟数据: df = pd.DataFrame({'A':[11,11,11,12,12,12],'B':[4,5,6,3,11,12]}) A B 0 11 4 1
df = pd.DataFrame({'A':[11,11,11,12,12,12],'B':[4,5,6,3,11,12]})
A B
0 11 4
1 11 5
2 11 6
3 12 3
4 12 11
5 12 12
我想表明,一列中的每个原始值都与第二列中的值位于一个组中。(从下面第2组中删除的第二列中的第12个副本)
最后,要使生成的数据帧具有A列中的值,并将组添加为列表和编号:
Col_A Grouped_values Group_name
11 [11,4,5,6,12] Group 1
12 [12,3,11] Group 2
谢谢你的帮助 IIUC需要将
A
的值转换为set
,然后将groupby和转换后的B
值添加到s
,并返回到列表
s,最后添加组名
列:
s = set(list(df['A']))
print (s)
{11, 12}
df = df.groupby('A')['B'].apply(lambda x: list(set(x) | s)).reset_index()
#thanks asongtoruin for better solution
df['Group_name'] = 'Group ' + (df.index + 1).astype(str)
print (df)
A B Group_name
0 11 [12, 11, 4, 5, 6] Group1
1 12 [11, 3, 12] Group2
我不太明白为什么
11
和12
会出现在您的第一组
列表中。你能澄清一下吗?在没有完全理解目标的情况下,你是否尝试过类似于df.groupby('A')['B']).apply(set)
聚合的逻辑不清楚。分组值在你的预期输出中是虚假的。我同意,当我手动将12添加到组1时,我有点破坏了逻辑。但我要做的是把两列中的数字分组。在原始数据帧的第4行中,12和11是在一起的,所以我想确保在两个结果组中都显示了这种关系。这会让事情变得明朗一点吗?为什么不df['Group_name']='Group'+(groups.index+1).astype(str)
?@Kdog-glady可以帮助:)
s = set(list(df['A']))
print (s)
{11, 12}
df = df.groupby('A')['B'].apply(lambda x: list(set(x) | s)).reset_index()
#thanks asongtoruin for better solution
df['Group_name'] = 'Group ' + (df.index + 1).astype(str)
print (df)
A B Group_name
0 11 [12, 11, 4, 5, 6] Group1
1 12 [11, 3, 12] Group2