如何仅内爆(爆炸的反向)pandas 中的非空值。使用 pandas group by 将多行合并为单行

Nay*_*ale 3 python aggregate-functions dataframe pandas pandas-groupby

我正在研究 Python Pandas。

我有一个 pandas 数据框,其中包含如下列:

ID 城市
1 纽约
1
1 亚特兰大
2 东京
2 京都
2
3 巴黎
3 波尔多
3
4 孟买
4
4 班加罗尔
5 伦敦
5
5 伯明翰

请注意,列中的空单元格要么是空字符串 (''),要么是 Nan 或 None。(为简单起见,我们只说它们是空字符串(''))。

我希望结果是这样的:

ID 城市
1 纽约、亚特兰大
2 东京、京都
3 巴黎、波尔多
4 孟买、班加罗尔
5 伦敦、伯明翰

简而言之,我想按 ID 分组,然后获取列表(通过删除空字符串)。

我有一个示例代码,但它实际上给了我带有空字符串的结果,我想删除空字符串。

dataFrame.groupby(['ID'], as_index=False)
                  .agg({'Cities': lambda x: x.tolist()})
Run Code Online (Sandbox Code Playgroud)

它给了我这样的结果:

ID 城市
1 纽约、亚特兰大
2 东京、京都、
3 巴黎、波尔多、
4 孟买、班加罗尔
5 伦敦、伯明翰

但我不想要空字符串......

请在这里帮助我。

非常感谢您的帮助。

Sea*_*ean 6

您可以尝试替换空字符串NaN,然后添加.dropna()到聚合 lambda 函数,如下所示:

df['Cities'] = df['Cities'].replace('', np.nan)

(df.groupby('ID', as_index=False)
                  .agg({'Cities': lambda x: x.dropna().tolist()})
)
Run Code Online (Sandbox Code Playgroud)

结果:

   ID                Cities
0   1   [New York, Atlanta]
1   2        [Tokyo, Kyoto]
2   3     [Paris, Bordeaux]
3   4   [Mumbai, Bangalore]
4   5  [London, Bermingham]
Run Code Online (Sandbox Code Playgroud)