我有一个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/