我有一个简单的问题,关于如何使用额外的列来解决Pandas Dataframe的额外问题。
数据集如下所示:
X = pd.DataFrame({'country':['Peru','Peru','Japan','Japan'],'method':['m1','m2','m1','m2'], 'value':[1,2,3,4]})
Country | Method | Value
Peru | m1 | 1
Peru | m2 | 2
Japan | m1 | 3
Japan | m2 | 4
所有“国家”都拥有所有“方法”的价值 我想将每个国家/地区的数据框作为一个列进行调整,但我需要继续使用该方法:
Peru | Japan | Method
1 | 3 | m1
2 | 4 | m4
感谢您的帮助!
答案 0 :(得分:1)
您需要将.pivot
应用于X
后跟.reset_index
我还删除了清洁输出列的名称。
df = X.pivot(index='method',columns='country',values='value').reset_index()
df.columns.name = ''
print(df)
输出:
method Japan Peru
0 m1 3 1
1 m2 4 2
答案 1 :(得分:0)
print (X.set_index(['method','country'])['value']
.unstack(fill_value=0)
.rename_axis(None, axis=1)
.reset_index())
method Japan Peru
0 m1 3 1
1 m2 4 2
但是如果得到错误(因为对method
,country
列中有重复项):
ValueError:索引包含重复的条目,无法重塑
具有groupby
的解决方案和一些汇总函数,例如mean
(sum
,...)
X = pd.DataFrame({'country':['Peru','Peru','Peru','Japan'],
'method':['m1','m2','m1','m2'],
'value':[1,2,3,4]})
print (X)
country method value
0 Peru m1 1
1 Peru m2 2
2 Peru m1 3 <-duplicates Peru, m1
3 Japan m2 4
print (X.groupby(['method','country'])['value'].mean()
.unstack(fill_value=0)
.rename_axis(None, axis=1)
.reset_index())
method Japan Peru
0 m1 0 2
1 m2 4 2
或pivot_table
默认aggfunc=np.mean
:
print (X.pivot_table(index='method',
columns='country',
values='value',
fill_value=0,
aggfunc=np.mean).
rename_axis(None, axis=1).
reset_index())
method Japan Peru
0 m1 0 2
1 m2 4 2