pandas 通过将列值Map到其他列来填充列的缺失值

tkqqtvp1  于 2023-11-15  发布在  其他
关注(0)|答案(2)|浏览(121)

这个框架看起来像这样:
| 年|月|
| --|--|
| 2021 | 10 |
| 2021 | 11 |
| 2021 | 12 |
| 2022 | 1 |
| 2022 | 2 |
| 2022 | 3 |
| 楠| 1 |
我必须通过检查相应月份列的年份来填充年份列中的空值,即如果月份是1,2或3,那么年份应该是2022,或者如果月份是10,11或12,那么年份应该是2021。
在这个例子中,我需要用2022来填充年的NaN值。使用pandas解决这个问题的最好方法是什么?

1cklez4t

1cklez4t1#

你可以使用布尔索引和numpy.select

  1. m = df['Year'].isna()
  2. df.loc[m, 'Year'] = np.select([df.loc[m, 'Month'].between(1, 3),
  3. df.loc[m, 'Month'].between(10, 12)],
  4. [2022, 2021])
  5. # if you want integers
  6. df = df.convert_dtypes()

字符串
输出量:

  1. Year Month
  2. 0 2021 10
  3. 1 2021 11
  4. 2 2021 12
  5. 3 2022 1
  6. 4 2022 2
  7. 5 2022 3
  8. 6 2022 1

展开查看全部
wn9m85ua

wn9m85ua2#

验证码

使用mapfillna

  1. m = {1:2022, 2:2022, 3:2022, 10:2021, 11:2021, 12:2021}
  2. out = df.assign(Year=df['Year'].fillna(df['Month'].map(m)).astype('int'))

字符串
输出:

  1. Year Month
  2. 0 2021 10
  3. 1 2021 11
  4. 2 2021 12
  5. 3 2022 1
  6. 4 2022 2
  7. 5 2022 3
  8. 6 2022 1

示例代码

  1. import pandas as pd
  2. data1 = {'Year': [2021, 2021, 2021, 2022, 2022, 2022, None],
  3. 'Month': [10, 11, 12, 1, 2, 3, 1]}
  4. df = pd.DataFrame(data1)

展开查看全部

相关问题