假设我有这个数据框:
df = pd.DataFrame({'n':[0 ,1 ,0 ,0 ,1 ,1 ,0 ,1],'l':[12 ,16 ,92, 77 ,32 ,47, 22, 14], 'cols':['col1','col1','col1','col1','col2','col2','col2','col2']})
这就是我想要得到的:
col1 col2
l n l n
12 0 32 1
16 1 47 1
92 0 22 0
77 0 14 1
我一直在玩set_index
and stack
/unstack
方法,但没有成功...
import pandas as pd
df = pd.DataFrame(
{'n':[0 ,1 ,0 ,0 ,1 ,1 ,0 ,1],'l':[12 ,16 ,92, 77 ,32 ,47, 22, 14],
'cols':['col1','col1','col1','col1','col2','col2','col2','col2']})
df['index'] = df.groupby(['cols']).cumcount()
result = df.pivot(index='index', columns='cols')
print(result)
# l n
# cols col1 col2 col1 col2
# index
# 0 12 32 0 1
# 1 16 47 1 1
# 2 92 22 0 0
# 3 77 14 0 1
如果您关心“ MultiIndex”列中标签的顺序,则可以使用“堆栈”和“堆栈”来精确复制发布的结果:
result = result.stack(level=0).unstack(level=1)
print(result)
# cols col1 col2
# l n l n
# index
# 0 12 0 32 1
# 1 16 1 47 1
# 2 92 0 22 0
# 3 77 0 14 1
在寻找解决方案时,回头思考通常会很有用。
从所需的DataFrame开始,然后问自己,什么操作可能导致所需的DataFrame。在这种情况下,想到的操作是pd.pivot
。接下来的问题是,数据帧,是什么something
,需要使
desired = something.pivot(index='index', columns='cols')
通过观察其他例子的pivot
行动,很明显不是something
必须等于
cols l n index
0 col1 12 0 0
1 col1 16 1 1
2 col1 92 0 2
3 col1 77 0 3
4 col2 32 1 0
5 col2 47 1 1
6 col2 22 0 2
7 col2 14 1 3
然后,你看你能不能找到一种方式来按摩df
到something
,或重新工作向后,按摩something
到df
......从这个角度来看,在这种情况下,缺少的环节变得明显:something
具有index
该列df
所缺少的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句