2016-12-14 96 views
1

我已经得到了以下数据框熊猫他们的方式我希望有一个数据框(如果可能的话...):熊猫:如何转动/重塑

df = pandas.DataFrame({"date_id": ["2016-12-13", "2016-12-12", "2016-12-13", "2016-12-13", "2016-12-12"], "gender": ["female", "female", "male", "unisex", "male"], "value": [251, 302, 256, 23, 283]}) 

里面居然是这样的小朋友:

 date_id gender value 
0 2016-12-13 female 251 
1 2016-12-12 female 302 
2 2016-12-13 male 256 
3 2016-12-13 unisex  23 
4 2016-12-12 male 283 

我想是这样的:

 date_id female_value male_value unisex_value 
0 2016-12-13   251   256   23 
1 2016-12-12   302   283    0 

这可能吗?如果是的话,哪个工具可以实现它?重塑?枢? 请注意,它应该是python3.x兼容。

在此先感谢您的帮助和建议。

UPDATE

我必须精确我的问题。除了上述的东西,我想改变我得到的数据框与to_dict(东方=“记录”),它是这样的:

df2.to_dict(orient="records") 
[{'female_value': 251, 'date_id': '2016-12-13', 'male_value': 256, 'unisex_value': 23}, {'female_value': 302, 'date_id': '2016-12-12', 'male_value': 283, 'unisex_value': 0}] 

亲切的问候 丹尼斯

回答

1

一个解决方案与pivot,但随后是必要fillna并转换为int,最后reset_index

df = df.pivot(index='date_id', columns='gender', values='value') 
     .fillna(0) 
     .astype(int) 
     .reset_index() 
print (df) 
gender  date_id female male unisex 
0  2016-12-12  302 283  0 
1  2016-12-13  251 256  23 

另一个与set_indexunstack,LA ST reset_index

df = df.set_index(['date_id','gender']).value.unstack(fill_value=0).reset_index() 
print (df) 
gender  date_id female male unisex 
0  2016-12-12  302 283  0 
1  2016-12-13  251 256  23 

print (df.to_dict(orient="records")) 
[{'date_id': '2016-12-12', 'unisex': 0, 'female': 302, 'male': 283}, 
{'date_id': '2016-12-13', 'unisex': 23, 'female': 251, 'male': 256}] 

如果需要更改列名添加add_suffix

df = df.set_index(['date_id','gender']).value 
     .unstack(fill_value=0) 
     .add_suffix('_value') 
     .reset_index() 
print (df) 
gender  date_id female_value male_value unisex_value 
0  2016-12-12   302   283    0 
1  2016-12-13   251   256   23 

print (df.to_dict(orient="records")) 
[{'female_value': 302, 'male_value': 283, 'unisex_value': 0}, 
{'female_value': 251, 'male_value': 256, 'unisex_value': 23}] 
+0

谢谢。你是对的 – jezrael

+0

谢谢。不幸的是我必须确定我的问题(请参阅上文)。当我在结果数据框中调用to_dict(orient =“records”)时,它不会在结果中输出'date_id'。 – Dennis

+0

请检查答案的编辑。 – jezrael