如何将Pandas中同file列值对应的source列统一替换为非unknown值
解决Pandas DataFrame中同一分组替换'unknown'值的问题
示例数据
先重现你的测试数据:
import pandas as pd df_test = pd.DataFrame(data=None, columns=['file','source']) df_test.file = ['file_1', 'file_1', 'file_2', 'file_2', 'file_3', 'file_3'] df_test.source = ['nasa', 'unknown', 'esa', 'unknown', 'jaxa', 'unknown']
解决方案
你可以通过分组填充的方式,将同一file分组内的'unknown'替换为该组内的有效source值,以下是两种简洁的实现方式:
方法1:利用缺失值填充(推荐)
先将'unknown'转为缺失值,再按file分组后用组内的第一个有效值填充所有行:
# 将'unknown'替换为Pandas缺失值 df_test['source'] = df_test['source'].replace('unknown', pd.NA) # 按file分组,用每组的非缺失值填充整组 df_test['source'] = df_test.groupby('file')['source'].transform('first')
方法2:直接分组筛选有效值
通过lambda函数在分组内直接筛选出非'unknown'的第一个值,并应用到组内所有行:
df_test['source'] = df_test.groupby('file')['source'].transform( lambda x: x[x != 'unknown'].iloc[0] )
验证结果
执行上述任一方法后,查看source列的结果:
print(df_test['source'].tolist()) # 输出: ['nasa', 'nasa', 'esa', 'esa', 'jaxa', 'jaxa']
注意事项
- 确保每个
file分组内只有一个非'unknown'的有效值,如果存在多个不同的有效值,需要先处理数据冲突问题。
内容的提问来源于stack exchange,提问作者Marcus K.
相关产品推荐
相关产品推荐

