Python中DataFrame按多列分组并拼接指定列字符串的问题
解决DataFrame分组合并非空字符串的问题
你遇到的问题是直接使用''.join作为聚合函数时,会把空字符串(或NaN)也纳入拼接,导致结果不符合预期。以下是两种可行的解决方法:
方法一:过滤空值后拼接
先将DataFrame中的NaN替换为空字符串(如果存在的话),然后在聚合时只拼接非空内容:
import pandas as pd # 构造示例DataFrame data = """A,B,C,D 91102,1,john, 91102,2,john, 91102,3,john, 91102,1,,mary 91102,2,,mary 91102,3,,mary 91103,1,sarah, 91103,2,sarah, 91103,3,sarah, 91103,1,,khan 91103,2,,khan 91103,3,,khan""" df = pd.read_csv(pd.io.common.StringIO(data)) # 将NaN替换为空字符串 df = df.fillna('') # 分组聚合,只拼接非空内容 df_result = df.groupby(['A', 'B'], as_index=False).agg(lambda x: ''.join(x[x != '']))
方法二:直接提取非空值
观察你的数据可知,每个A、B分组中,C和D列各自仅有一个非空值,因此可以直接提取该非空值:
df_result = df.groupby(['A', 'B'], as_index=False).agg(lambda x: x[x != ''].iloc[0])
两种方法都能得到你预期的结果:
A B C D 0 91102 1 john mary 1 91102 2 john mary 2 91102 3 john mary 3 91103 1 sarah khan 4 91103 2 sarah khan 5 91103 3 sarah khan
内容的提问来源于stack exchange,提问作者AB SEA
相关产品推荐
相关产品推荐

