2016-12-14 116 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