我有一个数据框:
index col1 col2 col3
0 X A 123
1 X A 456
2 X B 654
3 X B 321
4 X A 111
我尝试使用pivot_table
将此df转换为以下格式:
index A B
0 123 654
1 456 321
2 111 NaN
我试图使用... pivot_table(index=df.index, columns=['col2'], values='col3')
,但这只会在以下状态结束:
index A B
0 123 NaN
1 456 NaN
2 111 NaN
3 NaN 654
4 NaN 321
我该如何避免这种情况?
答案 0 :(得分:1)
仍在使用pivot_table
pd.pivot_table(df,index=df.groupby('col2').cumcount(),columns='col2',values='col3')
Out[163]:
col2 A B
0 123.0 654.0
1 456.0 321.0
2 111.0 NaN
答案 1 :(得分:1)
您pivot_table
的实施是正确的。
要合并您要询问的记录(在透视数据框中),您需要先使用pivot_table
然后使用apply
从透视数据框中删除NaN,作为{{3} }:
# Perform spreadsheet-style pivot table
df2 = df.pivot_table(index=df.index, columns=['col2'], values='col3')
print df2
# Drop NaNs to shift rows up and combine records
df1 = df2.apply(lambda x: pd.Series(x.dropna().values))
print (df1)
输出结果为:
# df2
col2 A B
0 123.0 NaN
1 456.0 NaN
2 NaN 654.0
3 NaN 321.0
4 111.0 NaN
# df1
col2 A B
0 123.0 654.0
1 456.0 321.0
2 111.0 NaN