基于groupby将多行附加为一行python

2024-05-01 21:20:57 发布

您现在位置:Python中文网/ 问答频道 /正文

各位,我对Python还不熟悉 我有这样一个数据集

ROLLNO     G1     G2     G3    G4
1          12     14     14    20
1          10     12     11    12
2          14     02     16    18
2          18     16     12    14

我想把它们合并为

ROLLNO    G1    G2     G3    G4   G5     G6     G7    G8
1         12    14     14    20   10     12     11    12
2         14    02     16    18   18     16     12    14

这是我写的代码,但它给了我错误的结果。你知道吗

print (CseStudents_ds.groupby('ROLLNO').apply(' '.join).reset_index())

我找了很多,想用group by,但不知道下一步该怎么做。有什么帮助吗


Tags: 数据代码错误dsprintg4g1g2
2条回答

您可以按ROLLNO对数据帧进行分组,并展平分配给数据帧的行

数据帧

    ROLLNO  G1  G2  G3  G4
0   1   12  14  14  20
1   1   10  12  11  12
2   2   14  2   16  18
3   2   18  16  12  14


df.set_index(['ROLLNO'],inplace=True)
df = df.groupby(df.index).apply(lambda x: x.values.flatten())
df1 = pd.DataFrame(df.values.tolist(),columns=['G{}'.format(i) for i in range(1,len(df.columns)*2-1)])
df1['ROLLNO'] = df.index

输出:

    G1  G2  G3  G4  G5  G6  G7  G8  ROLLNO
0   12  14  14  20  10  12  11  12  1
1   14  2   16  18  18  16  12  14  2

尝试格式化列和groupby以及新的数据框和concatdrop

v = df.groupby('ROLLNO').apply(lambda x: x.values.tolist())

df = pd.DataFrame(v.tolist(), index=v.index)\
       .rename(columns=lambda x: x + 1)\
       .add_prefix('G')\
       .reset_index()
df1 = pd.DataFrame(df['G1'].values.tolist())
df2 = pd.DataFrame(df['G2'].values.tolist())

df = pd.concat([df['ROLLNO'], df1, df2], axis=1)
df.columns=df.columns.astype(str)
df=df.drop(['0','6'],1)
df.columns = [df.columns[0]] + [f'G{i+1}' for i in range(len(df.columns)-1)]
print(df)

相关问题 更多 >