我有一个看起来像这样的数据帧:
ID | 名称 | Major1Major2 | Maver3 | |
---|---|---|---|---|
12 | Dave | 英语NaN | ||
12 | Dave | >NaN | 生物学 | NaN|
12 | Dave | >NaN | 历史 | |
13 | Nate | 西班牙语NaN | NaN | |
13 | Nate | >NaN | 业务 | NaN |
如果您打算使用groupby,您可以执行以下操作:
dataframe = dataframe.melt(['ID', 'Name']).dropna()
dataframe = dataframe.groupby(['ID', 'Name', 'variable'])['value'].sum().unstack('variable')
您可能需要稍微处理一下列名,但这是我想到的使用groupby的可能解决方案。
使用melt
和pivot
>>> df.melt(['ID', 'Name']).dropna()
.pivot(['ID', 'Name'], 'variable', 'value')
.reset_index().rename_axis(columns=None)
ID Name Major1 Major2 Major3
0 12 Dave English Biology History
1 13 Nate Spanish Business NaN