在多个索引上连接一列的字符串,同时保留其他列

2024-06-23 19:03:50 发布

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

下面是一个示例数据集:

>>> df1 = pandas.DataFrame({
    "Name": ["Alice", "Marie", "Smith", "Mallory", "Bob", "Doe"],
    "City": ["Seattle", None, None, "Portland", None, None],
    "Age": [24, None, None, 26, None, None],
    "Group": [1, 1, 1, 2, 2, 2]})

>>> df1
    Age      City  Group     Name
0  24.0   Seattle      1    Alice
1   NaN      None      1    Marie
2   NaN      None      1    Smith
3  26.0  Portland      2  Mallory
4   NaN      None      2      Bob
5   NaN      None      2      Doe

我想合并同一组所有索引的名称列,同时保留城市和年龄,例如:

>>> df1_summarised
    Age      City  Group     Name
0  24.0   Seattle      1    Alice Marie Smith
1  26.0  Portland      2    Mallory Bob Doe

我知道这两列(年龄、城市)在我的起始数据结构中给定组的第一个索引之后是NaN/无

我尝试了以下方法:

>>> print(df1.groupby('Group')['Name'].apply(' '.join))
Group
1    Alice Marie Smith
2      Mallory Bob Doe
Name: Name, dtype: object

但我想保留年龄和城市栏


Tags: namenonecityagegroupnanbobdf1
2条回答

试试这个:

In [29]: df1.groupby('Group').ffill().groupby(['Group','Age','City']).Name.apply(' '.join)
Out[29]:
Group  Age   City
1      24.0  Seattle     Alice Marie Smith
2      26.0  Portland      Mallory Bob Doe
Name: Name, dtype: object

groupby一起使用dropnaassign

docs to assign

df1.dropna(subset=['Age', 'City']) \
   .assign(Name=df1.groupby('Group').Name.apply(' '.join).values)

enter image description here


定时 每个请求

enter image description here


更新
使用groupbyagg
我想到这一点,感觉更加满足

df1.groupby('Group').agg(dict(Age='first', City='first', Name=' '.join))

得到准确的输出

df1.groupby('Group').agg(dict(Age='first', City='first', Name=' '.join)) \
   .reset_index().reindex_axis(df1.columns, 1)

相关问题 更多 >

    热门问题