我有一个Pandas dataframe,它显示了人们在一月份和二月份花费了多少钱。我想使用groupby函数按人对月份进行分组,但是我的代码生成的是DataFrameGroupBy object而不是实际的数据框。我还有一个性别专栏,我想保留下来。

码:

import pandas as pd
df = pd.DataFrame(data=[['Person A', 5, 21, 'Male'], ['Person B', 15, 3, 'Female']], columns=['Names', 'Jan', 'Feb', 'Gender'])
print df.groupby(['Names', 'Jan', 'Feb'])


输出:

<pandas.core.groupby.DataFrameGroupBy object at 0x020D4470>


起始数据帧:

      Names  Jan  Feb  Gender
0  Person A    5   21    Male
1  Person B   15    3    Female


所需输出:

            Names  Value    Gender
0  Person A - Jan      5     Male
1  Person A - Feb     21     Male
2  Person B - Jan     15     Female
3  Person B - Feb      3     Female

最佳答案

另一种使用堆栈的解决方案。

df_out = df.set_index(['Names']).stack().to_frame().reset_index()
df_out.columns = ['Names','month','value']


编辑

这也应该起作用:

stack_df = df.set_index(['Names', 'Gender']).stack().to_frame().reset_index()
stack_df.columns = ['Names','Gender','Month', 'Value']

关于python - Pandas中的Groupby产生Groupby对象而不是Dataframe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37146473/

10-12 21:57