所有人,我是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())
我进行了很多搜索,并考虑使用分组方式,但是无法弄清楚下一步该怎么做。任何帮助
答案 0 :(得分:3)
您可以按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
答案 1 :(得分:2)
尝试使用以下格式设置的列,groupby和新数据框以及concat
和drop
:
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)