使用pandas pivot_table确保相邻列值

时间:2017-11-24 16:17:25

标签: python pandas pivot-table

我有一个数据框:

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

我该如何避免这种情况?

2 个答案:

答案 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