Py学习  »  Python

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

Jagr • 5 年前 • 1496 次点击  

我想合并同一数据帧的行,更准确地说,在一个特定的列中获取具有相同值的行,并且只创建一行。下面是一个例子:

我有以下数据框:

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

我该怎么做?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49565
 
1496 次点击  
文章 [ 2 ]  |  最新文章 5 年前
DYZ
Reply   •   1 楼
DYZ    5 年前

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

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  
Andy L.
Reply   •   2 楼
Andy L.    5 年前

它是带有列预处理的透视表

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