【问题标题】:how to concat specific rows through a pandas dataframe如何通过熊猫数据框连接特定行
【发布时间】:2021-09-03 15:50:59
【问题描述】:

所以,我有这种情况:

有一个这样的数据框:

Number Description
10001 name 2
1002 name2(pt1)
NaN name2(pt2)
1003 name3
1004 name4(pt1)
NaN name4(pt2)
1005 name5

所以,我需要将名称(第 1 部分和第 2 部分)连接到一个字段中,然后删除 NaN 行,但我不知道如何执行此操作,因为这些行不遵循特定的间隔模式

【问题讨论】:

  • 你想要的输出是什么样的?

标签: python pandas merge concatenation


【解决方案1】:

在基于notna 数值的系列上尝试使用groupby aggregate

组的创建来源:

df['Number'].notna().cumsum()
0    1
1    2
2    2
3    3
4    4
5    4
6    5
Name: Number, dtype: int32

然后聚合取'第一个'Number(因为第一个值保证不是na)并执行一些操作来组合Descriptions,如join

new_df = (
    df.groupby(df['Number'].notna().cumsum(), as_index=False)
        .aggregate({'Number': 'first', 'Description': ''.join})
)

new_df:

    Number           Description
0  10001.0                name 2
1   1002.0  name2(pt1)name2(pt2)
2   1003.0                 name3
3   1004.0  name4(pt1)name4(pt2)
4   1005.0                 name5

或逗号分隔join:

new_df = (
    df.groupby(df['Number'].notna().cumsum(), as_index=False)
        .aggregate({'Number': 'first', 'Description': ','.join})
)

new_df:

    Number            Description
0  10001.0                 name 2
1   1002.0  name2(pt1),name2(pt2)
2   1003.0                  name3
3   1004.0  name4(pt1),name4(pt2)
4   1005.0                  name5

或者list:

new_df = (
    df.groupby(df['Number'].notna().cumsum(), as_index=False)
        .aggregate({'Number': 'first', 'Description': list})
)

new_df:

    Number               Description
0  10001.0                  [name 2]
1   1002.0  [name2(pt1), name2(pt2)]
2   1003.0                   [name3]
3   1004.0  [name4(pt1), name4(pt2)]
4   1005.0                   [name5]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-15
    • 2017-10-02
    • 2016-03-09
    • 2018-05-20
    • 2013-02-07
    • 1970-01-01
    • 2020-01-04
    • 2018-01-26
    相关资源
    最近更新 更多