我有像这样的csv数据
column1 column2
A 12
A 13
B 15
B 16
C 12
C 14
我想通过创建另一个column3来合并第1列中具有相同值的行,或者说像这样的转置
column1 column2 column3
A 12 13
B 15 16
C 12 14
我正在使用pandas并希望为此运行一些循环,可能。
答案 0 :(得分:3)
使用groupby
与cumcount
一起设置索引,然后unstack
c = 'column1'
s = df.set_index([c, df.groupby(c).cumcount() + 2]).column2
s.unstack().add_prefix('column').reset_index()
column1 column2 column3
0 A 12 13
1 B 15 16
2 C 12 14
如果组的数量不均匀,这将处理。
考虑df
column1 column2
A 12
A 13
B 15
B 16
B 16
C 12
C 14
C 14
C 14
然后
c = 'column1'
s = df.set_index([c, df.groupby(c).cumcount() + 2]).column2
s.unstack().add_prefix('column').reset_index()
column1 column2 column3 column4 column5
0 A 12.0 13.0 NaN NaN
1 B 15.0 16.0 16.0 NaN
2 C 12.0 14.0 14.0 14.0
如果您想提前填写NaN
,请使用fill_value
unstack
参数
c = 'column1'
s = df.set_index([c, df.groupby(c).cumcount() + 2]).column2
s.unstack(fill_value=0).add_prefix('column').reset_index()
column1 column2 column3 column4 column5
0 A 12 13 0 0
1 B 15 16 16 0
2 C 12 14 14 14