繁体   English   中英

Pandas 将多行合并为一行,有条件

[英]Pandas combine multiple rows into one row with condition

我想将行组合成具有条件的单行。 (语言: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

但我找不到这个问题的逻辑。 任何想法?

当前数据

结果

利用:

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']上使用Series.ffill创建石斑鱼g

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

使用DataFrame.groupby将 dataframe 分组到 grouper g上并使用first聚合,然后在第1列上使用Series.dropna并使用Series.groupbyg上分组第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'。 这是默认选项,因为它会导致零信息丢失。 *走路口,join='inner'。

以下是每种方法的示例。 首先,默认 joins ='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)

在此处输入图像描述

与 join='inner' 相同:

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

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM