如何在python中的同一数据框中合并行?

时间:2019-11-13 06:09:56

标签: python pandas dataframe

我想更准确地合并同一数据帧的行,以在特定列中采用具有相同值的行,并仅创建一行。这是一个示例:

我有以下数据框:

te= {'TEAM': ['HC','TC','HC','BC','TC','BC'],
        'A1': [22,25,27,35,31,41],
        'A2': [20,50,70,11,14,12]
        }

df = pd.DataFrame(te,columns= ['TEAM', 'A1', "A2"])

print (df)

 TEAM  A1  A2
0   HC  22  20
1   TC  25  50
2   HC  27  70
3   BC  35  11
4   TC  31  14
5   BC  41  12

并且我想为列TEAM的三个可能值形成一行,例如预期的输出如下:

 TEAM  A1  A2  A1(1)  A2(1)
0   HC  22  20     27     70
1   TC  25  50     31     14
2   BC  35  11     41     12

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这是对列进行预处理的数据透视表

s = df.groupby('TEAM').cumcount()
m = s.astype(bool) * ('('+s.astype(str)+')')
df_out = df.set_index(['TEAM', m]).unstack().sort_index(level=1, axis=1).reset_index()
df_out.columns = df_out.columns.map(lambda x: f'{x[0]}{x[1]}')

Out[268]:
  TEAM  A1  A2  A1(1)  A2(1)
0   BC  35  11     41     12
1   HC  22  20     27     70
2   TC  25  50     31     14

答案 1 :(得分:0)

也许有更好的方法,但是此解决方案可扩展到任意数量的行。

df['order'] = df.groupby('TEAM').cumcount() + 1
df.set_index(['TEAM','order']).unstack()
#       A1      A2         
#order   1   2   1   2  
#TEAM                       
#BC     35  41  11  12  
#HC     22  27  20  70  
#TC     25  31  50  14