如何实现DataFrame两数字列排除零值后的字符串拼接?
问题:合并DataFrame两列并排除零值拼接字符串
我从数据库导出并清理了一个DataFrame,部分数据的单个数字被拆分到了crashes_1列(比如第9行)。现在需要合并crashes和crashes_1两列,排除零值后做字符串拼接,例如第9行最终的total_crashes需要是158。
我尝试了以下代码但均未生效:
df['total_crashes'] = df['crashes'].astype(str).str.zfill(0) + df['crashes_1'].astype(str).str.zfill(0) df['total_crashes'] = df['total_crashes'].astype(str).replace('\0', '', regex=True) df['total_crashes'] = df['total_crashes'].apply(lambda x: ''.join(x[x!=0])) df['total_crashes'] = df['total_crashes'].str.cat(df['total_crashes'], x[x!=0]) df['total_crashes'] = df.drop[0].sum(axis=1)
有效解决方案
核心思路是将两列转为字符串,清除所有形式的零值后再拼接,代码如下:
# 处理两列:转字符串,匹配所有零值(0、0.0等)并替换为空 df['total_crashes'] = (df['crashes'].astype(str).str.replace(r'^0\.?0*$', '', regex=True) + df['crashes_1'].astype(str).str.replace(r'^0\.?0*$', '', regex=True)) # 可选:将结果转为整数类型(如果需要数值格式) df['total_crashes'] = df['total_crashes'].astype(int)
如果你的零值仅为整数0或字符串'0',也可以用更简单的写法:
# 转字符串后替换零值为空,再拼接 df['total_crashes'] = (df['crashes'].astype(str).replace('0', '', regex=False) + df['crashes_1'].astype(str).replace('0', '', regex=False)) # 转数值 df['total_crashes'] = df['total_crashes'].astype(int)
这个方案会自动忽略两列中的零值,只保留有效数字进行拼接,比如当crashes为15、crashes_1为8时,得到158;如果其中一列是零,则直接保留另一列的数值。
内容的提问来源于stack exchange,提问作者Mark Moralls
相关产品推荐
相关产品推荐

