如何基于站点条件填充DataFrame的national plan value列空值
解决DataFrame空值填充问题(基于相同Site的非空值)
嘿,我来帮你搞定这个DataFrame的空值填充需求!先理清楚咱们的问题和数据:
原始数据df1
首先,你的原始DataFrame长这样(我把“空”换成了pandas识别的NaN缺失值):
| Site | cells | national plan value |
|---|---|---|
| T13630 | G13630B | 225 |
| T13631 | G13631A | NaN |
| T13631 | U13631A | 57 |
| T13672 | G13672A | 310 |
| T13802 | G13802A | 150 |
| T13802 | G13802B | 151 |
| T13802 | U13802A | NaN |
| T13880 | G13880A | 274 |
| T13880 | U13880B | NaN |
| T33281 | U33281A | NaN |
需求说明
你需要生成df2,把national plan value列的空值填上,规则是:找到该列的空值单元格,如果同一Site下有其他非空的数值,就用这些值来填充空值(不管空值在非空值的上面还是下面)。下面我给你几种常用的实现方式,你可以根据自己的需求选:
代码实现
首先,先把原始数据加载成pandas的DataFrame:
import pandas as pd import numpy as np # 构造你的原始df1 data = { 'Site': ['T13630', 'T13631', 'T13631', 'T13672', 'T13802', 'T13802', 'T13802', 'T13880', 'T13880', 'T33281'], 'cells': ['G13630B', 'G13631A', 'U13631A', 'G13672A', 'G13802A', 'G13802B', 'U13802A', 'G13880A', 'U13880B', 'U33281A'], 'national plan value': [225, np.nan, 57, 310, 150, 151, np.nan, 274, np.nan, np.nan] } df1 = pd.DataFrame(data)
方式1:用同Site的第一个非空值填充
这种方式会把同Site下第一个出现的非空值,填充到该Site所有的空值里,不管空值在上面还是下面:
df2 = df1.copy() # 按Site分组,先向前填充再向后填充,确保所有空值都被覆盖 df2['national plan value'] = df2.groupby('Site')['national plan value'].apply(lambda x: x.ffill().bfill())
方式2:用同Site的平均值填充
如果同Site有多个非空值,取它们的平均值来填充空值,适合数值型数据的统计填充:
df2 = df1.copy() # 计算每个Site的均值,然后填充空值 site_avg = df2.groupby('Site')['national plan value'].transform('mean') df2['national plan value'] = df2['national plan value'].fillna(site_avg)
方式3:用同Site的众数填充
如果你的数据有重复出现的高频值,想用出现次数最多的值填充,可以用这个方式:
df2 = df1.copy() # 计算每个Site的众数,处理众数可能为空的情况 site_mode = df2.groupby('Site')['national plan value'].transform(lambda x: x.mode()[0] if not x.mode().empty else np.nan) df2['national plan value'] = df2['national plan value'].fillna(site_mode)
结果说明
- 像
T13631这个Site,空值会被填充成57(三种方式结果一致) T13802这个Site,方式1会填150(第一个非空值),方式2会填150.5(150和151的均值),方式3会填150(因为两个值出现次数相同,取第一个众数)T33281这个Site没有任何非空值,所以空值会保留为NaN,如果需要的话你可以再加一步填充默认值(比如fillna(0))
内容的提问来源于stack exchange,提问作者amrutha
相关产品推荐
相关产品推荐

