Pandas根据条件将多行合并为一行

2024-10-03 21:27:56 发布

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

我想根据条件将行合并成单行。(语言:Python,数据帧:Pandas) 例如:

Current data:

        0      1        2     3    4
     0  data1
     1         string1  num1  ex1  bla1    
     2         string2
     3         string3
     4  data2  
     5         string4  num2  ex2  bla2
     6         string5

Result:

        0      1                        2     3    4 
     0  data1  string1 string2 string3  num1  ex1  bla1
     0  data2  string4 string5          num2  ex2  bla2

但我找不到解决这个问题的逻辑。有什么想法吗

Current Data

Result


Tags: 条件单行string1data1data2ex1num2num1
2条回答

使用:

g = df['0'].ffill()

d = df.groupby(g, sort=False).first()
d['1'] = df['1'].dropna().groupby(g).agg(' '.join)
d = d.reset_index(drop=True)

详细信息:

使用df['0']上的^{}创建一个grouper g

print(g)
0     data1
1     data1
2     data1
3     data1
4     data2
5     data2
6     data2
Name: 0, dtype: object

使用^{}对grouperg上的数据帧进行分组并使用first进行聚合,然后在列1上使用^{}并使用^{}g上的列1进行分组并使用join进行聚合,最后使用reset_index

print(d)
        0                        1     2    3         4
0   data1  string1 string2 string3  num1  ex1      bla1    
1   data2          string4 string5  num2  ex2      bla2

您可以选择如何处理其他轴(连接的轴除外)。这可以通过以下两种方式完成: *让他们联合起来,加入我们。这是默认选项,因为它会导致零信息丢失。 *走十字路口,加入“内线”

下面是每种方法的示例。首先,默认的join='outer'行为:

In [8]: df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
   ...:                     'D': ['D2', 'D3', 'D6', 'D7'],
   ...:                     'F': ['F2', 'F3', 'F6', 'F7']},
   ...:                    index=[2, 3, 6, 7])
   ...: 

In [9]: result = pd.concat([df1, df4], axis=1, sort=False)

Enter image description here

join='inner'也有同样的情况:

 In [10]: result = pd.concat([df1, df4], axis=1, join='inner')

Enter image description here

相关问题 更多 >