[英]Sort data into multiindex dataframe
如何将DataFrame中的数据排序为对索引和列使用MultiIndex的DataFrame?
例如,从以下转换:
0 1 2 3 4
0 foo two A 2.30 0.01
1 foo one A 4.12 0.13
2 bar two B 9.89 3.66
3 foo one A 2.11 9.48
4 bar two A 1.07 5.55
对此:
A B
1 2 1 2
foo one 2.11 9.48 NaN NaN
two 2.3 0.01 NaN NaN
bar one NaN NaN NaN NaN
two 1.07 5.55 9.89 3.66
目前我正在迭代df1
每一行并更新df2
的值,但我想要一个比这更有效的方法:
for index, row in df1.iterrows():
df2.loc[(row[0], row[1]), row[2]] = list(row[3:])
您可以使用:
def f(x):
return pd.DataFrame({'a':x.values.ravel()}).rename(lambda x: x + 1)
df = df.groupby([0,1,2])[3,4].apply(f)['a'].unstack([2,3]).sort_index(level=0, axis=1)
df = df.rename_axis((None, None),axis=1).reindex(pd.MultiIndex.from_product(df.index.levels))
print (df)
A B
1 2 3 4 1 2
bar one NaN NaN NaN NaN NaN NaN
two 1.07 5.55 NaN NaN 9.89 3.66
foo one 4.12 0.13 2.11 9.48 NaN NaN
two 2.30 0.01 NaN NaN NaN NaN
说明 :
对于每个组,前3列使用DataFrame
apply
自定义函数,也从1
开始增加索引值
通过重塑unstack
和排序Multiindex
由列sort_index
删除列名称(左下角为2
),并通过reindex
和MultiIndex.from_product
索引中的缺失MultiIndex
添加到MultiIndex
中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.