我在数据框中的每一行都有动态的列数,一条记录可以包含多于1行。前2列是关键列。如果关键列匹配,我必须将每一行数据追加到单个行中,并根据需要创建尽可能多的列。
输入在列c2下方(数据框)c1在列等...
row 1: A 1 c1 c2 c3.. c20
row 2: A 1 c21....c25
row 3. A 1 c26.... c35
row 4: A 2 d1 d2... d21
row 5: A 2 d22....d27
我尝试使用df.groupby(___前2列名称____)。first()。reset_index(),因为我们使用first()时它仅返回第一行。在python中有什么功能可以做到吗
需要的输出:(数据框)
row 1: A 1 c1 c2...c35 (each value in 1 column)
row 2: A 2 d1...d27 (each value in 1 column)
答案 0 :(得分:1)
将GroupBy.cumcount
用于一系列计数器,然后在列表推导中使用DataFrame.set_index
,DataFrame.sort_index
并最后展平MultiIndex
:
print (df)
a b c d e f
row1: A 1 c1 c2 c3 c20
row2: A 1 c21 c22 c23 c24
row3. A 1 c26 c27 c28 c29
row4: A 2 d1 d2 d21 d22
row5: A 2 d22 d27 d28 d29
s = df.groupby(['a','b']).cumcount()
df1 = df.set_index(['a', 'b', s]).unstack().sort_index(level=1, axis=1)
df1.columns = [f'{x}{y}' for x, y in df1.columns]
df1 = df1.reset_index()
print (df1)
a b c0 d0 e0 f0 c1 d1 e1 f1 c2 d2 e2 f2
0 A 1 c1 c2 c3 c20 c21 c22 c23 c24 c26 c27 c28 c29
1 A 2 d1 d2 d21 d22 d22 d27 d28 d29 NaN NaN NaN NaN