我正在尝试重塑 df,以便值成为列,而当前列的名称成为新 df 的值。
这是一个例子。
df1=pd.DataFrame(data=[['v1','v2','v3'],['v4','v3','v1'],[np.nan,'v2','v1'],['v5','v3','v6'],], columns=['A','B','C'], index=['d1','d2','d3','d4'])
df1.index.names=['Day']
df1 # What I have
Out[1]:
A B C
Day
d1 v1 v2 v3
d2 v4 v3 v1
d3 NaN v2 v1
d4 v5 v3 v6
df2=pd.DataFrame(data=[['A','B','C',np.nan,np.nan,np.nan],['C',np.nan,'B','A',np.nan,np.nan],['C','B',np.nan,np.nan,np.nan,np.nan],[np.nan,np.nan,'B',np.nan,'A','C']], columns=['v1','v2','v3','v4','v5','v6'], index=['d1','d2','d3','d4'])
df2.index.names=['Day']
df2 # Desired output
Out[2]:
v1 v2 v3 v4 v5 v6
d1 A B C NaN NaN NaN
d2 C NaN B A NaN NaN
d3 C B NaN NaN NaN NaN
d4 NaN NaN B NaN A C
我猜有 stack()、unstack() 或 pivot() 吗?
答案 0 :(得分:2)
尝试,stack
然后 pivot
:
df1a = df1.stack().reset_index()
df1a.pivot('Day', 0, 'level_1')
输出:
0 v1 v2 v3 v4 v5 v6
Day
d1 A B C NaN NaN NaN
d2 C NaN B A NaN NaN
d3 C B NaN NaN NaN NaN
d4 NaN NaN B NaN A C
和reset_index
:
df1a.pivot('Day', 0, 'level_1').reset_index()
输出:
0 Day v1 v2 v3 v4 v5 v6
0 d1 A B C NaN NaN NaN
1 d2 C NaN B A NaN NaN
2 d3 C B NaN NaN NaN NaN
3 d4 NaN NaN B NaN A C
答案 1 :(得分:0)