python pandas将两行或多行文本合并为一行

Posted

技术标签:

【中文标题】python pandas将两行或多行文本合并为一行【英文标题】:python pandas merge two or more lines of text into one line 【发布时间】:2017-07-03 13:28:40 【问题描述】:

我有如下文本数据的数据框,

    name | address                  | number 
1   Bob    bob                        No.56
2          @gmail.com           
3   Carly  carly@world.com            No.90
4   Gorge  greg@yahoo     
5          .com                   
6                                     No.100

并且想把它做成这样的框架。

    name | address               | number 
1   Bob    bob@gmail.com           No.56
2   Carly  carly@world.com         No.90                 
3   Gorge  greg@yahoo.com          No.100

我正在使用 pandas 读取文件,但不知道如何使用合并或连接。

【问题讨论】:

【参考方案1】:

如果name 列包含唯一值,

print df

    name          address  number
0    Bob              bob   No.56
1    NaN       @gmail.com     NaN
2  Carly  carly@world.com   No.90
3  Gorge       greg@yahoo     NaN
4    NaN             .com     NaN
5    NaN              NaN  No.100

df['name'] = df['name'].ffill()
print df.fillna('').groupby(['name'], as_index=False).sum()

    name          address  number
0    Bob    bob@gmail.com   No.56
1  Carly  carly@world.com   No.90
2  Gorge   greg@yahoo.com  No.100

您可能需要ffill()bfill()[::-1].groupby('name').apply(lambda x: ' '.join(x['address']))strip()lstrip()rstrip()replace() 之类的东西来将上述代码扩展到更复杂的数据。

【讨论】:

【参考方案2】:

如果要转换性别行的数据框(每列中可能有 NaN 条目),可能没有直接的 pandas 方法。

您将需要一些代码来分配name 列中的值,以便pandas 可以知道bob@gmail.com 的拆分行属于同一用户Bob

您可以使用fillnaffill 方法将name 列中的每个空条目填充为其前一个用户,请参阅pandas dataframe missing data。

df ['name'] = df['name'].ffill()

# gives
    name    address number
0   Bob bob No.56
1   Bob @gmail.com  
2   Carly   carly@world.com No.90
3   Gorge   greg@yahoo  
4   Gorge   .com    
5   Gorge       No.100

那么你可以使用groupbysum作为聚合函数。

df.groupby(['name']).sum().reset_index()

# gives
    name    address number
0   Bob bob@gmail.com   No.56
1   Carly   carly@world.com No.90
2   Gorge   greg@yahoo.com  No.100

您可能会发现在NaN 和空白之间进行转换很有用,请参阅Replacing blank values (white space) with NaN in pandas 和pandas.DataFrame.fillna。

【讨论】:

以上是关于python pandas将两行或多行文本合并为一行的主要内容,如果未能解决你的问题,请参考以下文章

使用Python / Pandas将两行数据合并为一行

Ms Access 像这样将两行合二为一

pyspark:如果列在不同行中具有相同的值,则合并两行或多行

SQL 将两行合二为一

oracle 两行及多行关键字相同数据并为一条数据

sqlserver怎么将两行数据合并成一行