Python中的数据转换

时间:2016-07-11 15:01:13

标签: python pandas

我有以下DataFrame:

ID    MONTHLY_QTY
H1    M1
H1    M2
H1    M3
H1    M4
H2    M1
H2    M4

我需要把它变成这样的东西:

ID    col1  col2  col3  col4
H1    M1    M2    M3    M4
H2    M1    M2

MONTHLY_QTY的不同值的数量是有限的,即M1-M4。

有没有办法在Python中实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以将cumcountpivot一起使用,如果需要,请移除NaN fillna

df['g'] = 'col' + (df.groupby('ID').cumcount() + 1).astype(str)
df = df.pivot(index='ID', columns='g', values='MONTHLY_QTY')
df.fillna('', inplace=True)
print (df)
g  col1 col2 col3 col4
ID                    
H1   M1   M2   M3   M4
H2   M1   M4   

答案 1 :(得分:1)

从此df开始:

   ID MONTHLY_QTY
0  H1          M1
1  H1          M2
2  H1          M3
3  H1          M4
4  H2          M1
5  H2          M4

dummies = pd.get_dummies(df["MONTHLY_QTY"])
df2     = df.join(dummies)
df2.groupby(['ID' ] )['M1','M2', "M3", "M4" ].sum()

    M1   M2   M3   M4
ID                    
H1  1.0  1.0  1.0  1.0
H2  1.0  0.0  0.0  1.0

df2.rename(columns={'M1': 'col1', 'M2': 'col2', 'M3': 'col3','M4': 'col4', })


   col1  col2  col3  col4
ID                        
H1   1.0   1.0   1.0   1.0
H2   1.0   0.0   0.0   1.0

我无法弄清楚如何用列标题值替换1。