我有以下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中实现这一目标?
答案 0 :(得分:1)
您可以将cumcount
与pivot
一起使用,如果需要,请移除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。