示例数据集:
data = {"id":{"0":"1234","1":"1234","2":"4567","3":"4567","4":"4567","5":"89123","6":"89123","7":"89123","8":"18749"},"name":{"0":"bob","1":"rob","2":"bob","3":"rob","4":"sam","5":"bob","6":"rob","7":"sam","8":"dick"}}
df = pd.DataFrame(data=data)
解决方案应该将id列中的每个唯一值作为列,然后将name列中的每个关联值作为该行的值。
我知道我可以通过多种方式做到这一点,我这样做的目的是希望看到所有不同方式的例子。
例如,我看到了这个:
df.groupby('id')['name'].apply(list)
我发现这是一个非常酷的解决方案,但我不确定发生了什么。我假设它正在应用一个函数,将与每个id值关联的所有值转换为列表。我还想知道如何使用stack,unstack,transpose和pivot来解决这个问题。
答案 0 :(得分:2)
重建
pd.Series(df.name.values, [df.index, df.id.values]).unstack()
1234 18749 4567 89123
0 bob None None None
1 rob None None None
2 None None bob None
3 None None rob None
4 None None sam None
5 None None None bob
6 None None None rob
7 None None None sam
8 None dick None None
set_index
df.set_index('id', append=True).name.unstack()
1234 18749 4567 89123
0 bob None None None
1 rob None None None
2 None None bob None
3 None None rob None
4 None None sam None
5 None None None bob
6 None None None rob
7 None None None sam
8 None dick None None
fill_value=''
df.set_index('id', append=True).name.unstack(fill_value='')
id 1234 18749 4567 89123
0 bob
1 rob
2 bob
3 rob
4 sam
5 bob
6 rob
7 sam
8 dick
答案 1 :(得分:2)
使用pivot的另一种解决方案。
df.pivot(columns='id',values='name')
Out[280]:
id 1234 18749 4567 89123
0 bob None None None
1 rob None None None
2 None None bob None
3 None None rob None
4 None None sam None
5 None None None bob
6 None None None rob
7 None None None sam
8 None dick None None