无论如何要取消分组 pandas 数据框中的数据?
Is there anyway to ungroup data in a grouped-by pandas dataframe?
我有一个数据集,为简单起见,我需要根据一列进行分组和聚合,以便我可以轻松删除一些行。完成计算后,我需要通过操作反转组,以便我可以在 excel 中轻松查看数据框。如果我不反转操作,我会将整个列表导出到 excel,这不容易分析。非常感谢任何帮助。
示例:
Col1 Col2 Col3
123 11 Yes
123 22 Yes
256 33 Yes
256 33 No
337 00 No
337 44 No
应用 groupby 和聚合后:
X=dataset.groupby('Col1').agg(lambda x:set(x)).reset_index()
我明白了
Col1 Col2 Col3
123 {11,22} {Yes}
256 {33} {Yes, No}
337 {00,44} {No}
然后我使用 drop
删除所有包含 Yes 的列
X=X.reset_index(drop=True)
在导出到 excel 之前我需要得到的是
Col1 Col2 Col3
337 00 No
337 44 No
希望这足够清楚
提前致谢
我不认为转换成集合是个好主意。这是一个替代方案:首先按 Col3
降序排序,然后创建 Col2 : Yes/No
的映射并基于该映射进行过滤。
In [1191]: df = df.sort_values('Col3', ascending=True)
In [1192]: mapping = dict(df[['Col2', 'Col3']].values)
In [1193]: df[df.Col2.replace(mapping) == 'No'] # or df.Col2.map(mapping)
Out[1193]:
Col1 Col2 Col3
4 337 0 No
5 337 44 No
我同意 COLDSPEED。您无需转换即可设置
df['Temp']=df.Col3.eq('Yes')
DF=df.groupby('Col1')['Temp'].sum()
df[df.Col1==DF.index[DF==0].values[0]].drop('Temp',axis=1)
Out[113]:
Col1 Col2 Col3
4 337 0 No
5 337 44 No
我有一个数据集,为简单起见,我需要根据一列进行分组和聚合,以便我可以轻松删除一些行。完成计算后,我需要通过操作反转组,以便我可以在 excel 中轻松查看数据框。如果我不反转操作,我会将整个列表导出到 excel,这不容易分析。非常感谢任何帮助。
示例:
Col1 Col2 Col3
123 11 Yes
123 22 Yes
256 33 Yes
256 33 No
337 00 No
337 44 No
应用 groupby 和聚合后:
X=dataset.groupby('Col1').agg(lambda x:set(x)).reset_index()
我明白了
Col1 Col2 Col3
123 {11,22} {Yes}
256 {33} {Yes, No}
337 {00,44} {No}
然后我使用 drop
删除所有包含 Yes 的列X=X.reset_index(drop=True)
在导出到 excel 之前我需要得到的是
Col1 Col2 Col3
337 00 No
337 44 No
希望这足够清楚
提前致谢
我不认为转换成集合是个好主意。这是一个替代方案:首先按 Col3
降序排序,然后创建 Col2 : Yes/No
的映射并基于该映射进行过滤。
In [1191]: df = df.sort_values('Col3', ascending=True)
In [1192]: mapping = dict(df[['Col2', 'Col3']].values)
In [1193]: df[df.Col2.replace(mapping) == 'No'] # or df.Col2.map(mapping)
Out[1193]:
Col1 Col2 Col3
4 337 0 No
5 337 44 No
我同意 COLDSPEED。您无需转换即可设置
df['Temp']=df.Col3.eq('Yes')
DF=df.groupby('Col1')['Temp'].sum()
df[df.Col1==DF.index[DF==0].values[0]].drop('Temp',axis=1)
Out[113]:
Col1 Col2 Col3
4 337 0 No
5 337 44 No