将连续行与相同的列值合并

2024-05-28

我有一个看起来像这样的东西。 我该如何处理:

    0             d
0   The         DT
1   Skoll       ORGANIZATION
2   Foundation  ORGANIZATION
3   ,           ,
4   based       VBN
5   in          IN
6   Silicon     LOCATION
7   Valley      LOCATION

to this:

    0                       d
0   The                     DT
1   Skoll Foundation        ORGANIZATION
3   ,                       ,
4   based                   VBN
5   in                      IN
6   Silicon Valley          LOCATION

@rfan 的答案当然有效,作为替代方案,这是一种使用 pandas 的方法groupby http://pandas.pydata.org/pandas-docs/stable/groupby.html.

The .groupby()按“b”列对数据进行分组 -sort=False是保持订单完整所必需的。这.apply()对每组 b 数据应用一个函数,在本例中将字符串连接在一起,并用空格分隔。

In [67]: df.groupby('b', sort=False)['a'].apply(' '.join)
Out[67]: 

b
DT                       The
Org         Skoll Foundation
,                          ,
VBN                    based
IN                        in
Location      Silicon Valley
Name: a, dtype: object

EDIT:

为了处理更一般的情况(重复的非连续值) - 一种方法是首先添加一个哨兵列,用于跟踪每行适用于哪一组连续数据,如下所示:

df['key'] = (df['b'] != df['b'].shift(1)).astype(int).cumsum()

然后将键添加到 groupby 中,即使使用重复的值,它也应该可以工作。例如,使用具有重复的虚拟数据:

df = DataFrame({'a': ['The', 'Skoll', 'Foundation', ',', 
                      'based', 'in', 'Silicon', 'Valley', 'A', 'Foundation'], 
                'b': ['DT', 'Org', 'Org', ',', 'VBN', 'IN', 
                      'Location', 'Location', 'Org', 'Org']})

应用分组依据:

In [897]: df.groupby(['key', 'b'])['a'].apply(' '.join)
Out[897]: 
key  b       
1    DT                       The
2    Org         Skoll Foundation
3    ,                          ,
4    VBN                    based
5    IN                        in
6    Location      Silicon Valley
7    Org             A Foundation
Name: a, dtype: object
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将连续行与相同的列值合并 的相关文章

随机推荐