如何使用Pandas基于ColA的值对ColB数据进行归类合并
Pandas实现COLB按ColA归类方案
步骤说明与代码实现
首先构造示例DataFrame(模拟你的原始数据):
import pandas as pd import numpy as np df = pd.DataFrame({ 'ColA': ['ABC', np.nan, np.nan, 'DEF', np.nan, np.nan, np.nan, 'GHI', 'IJK'], 'COLB': [np.nan, 'a', 'b', np.nan, 'c', 'd', 'e', np.nan, 'f'] })
1. 填充ColA的缺失值
利用前向填充(ffill),将ColA中连续的空值替换为最近的非空ColA值,让每个COLB条目对应到正确的分组:
df['ColA'] = df['ColA'].ffill()
2. 过滤无效行
去掉COLB为空的行(这些是每个分组开头的原始空行,无有效COLB数据):
df_filtered = df[df['COLB'].notna()]
3. 分组合并COLB数据
按ColA分组,将每组的COLB值用逗号拼接:
grouped = df_filtered.groupby('ColA')['COLB'].agg(','.join).reset_index()
4. 补充缺失分组并处理空值
对于没有对应COLB数据的ColA(如GHI),补充到结果中并将COLB设为"Empty":
# 获取所有唯一的ColA分组 all_groups = df['ColA'].unique() # 重新索引补充分组,填充空值 result = grouped.set_index('ColA').reindex(all_groups).fillna('Empty').reset_index()
执行后输出结果:
ColA COLB 0 ABC a,b 1 DEF c,d,e 2 GHI Empty 3 IJK f
简洁版代码
可以将上述步骤合并为链式调用:
import pandas as pd import numpy as np df = pd.DataFrame({ 'ColA': ['ABC', np.nan, np.nan, 'DEF', np.nan, np.nan, np.nan, 'GHI', 'IJK'], 'COLB': [np.nan, 'a', 'b', np.nan, 'c', 'd', 'e', np.nan, 'f'] }) result = ( df.assign(ColA=df['ColA'].ffill()) .query('COLB.notna()') .groupby('ColA')['COLB'].agg(','.join) .reindex(df['ColA'].ffill().unique()) .fillna('Empty') .reset_index() ) print(result)
内容的提问来源于stack exchange,提问作者user19596176
相关产品推荐
相关产品推荐

