根据另一列的值填充列中的缺失值

时间:2021-05-11 22:22:09

标签: python pandas

我有一个 df,它有 3 列:recnumstatezip_codestate 列缺少值,我想根据匹配的 zip_code 填充它们。我试过使用 .ffill 没有运气。下面是 df 当前外观的示例以及我希望输出的外观。任何帮助将不胜感激。

recnum:int64 状态:字符串 邮编:float64

当前df

<头>
recnum 状态 邮政编码
1 AL 11111
2 CO 22222
3 发送 33333
4 NaN 11111
5 AL 11111
6 CO 22222
7 发送 33333
8 NaN 22222

期望的输出:

<头>
recnum 状态 邮政编码
1 AL 11111
2 CO 22222
3 发送 33333
4 AL 11111
5 AL 11111
6 CO 22222
7 发送 33333
8 CO 22222

1 个答案:

答案 0 :(得分:1)

尝试按 zip_code 分组,然后使用 ffill、bfill 来填写 nans:

import numpy as np
import pandas as pd

df = pd.DataFrame({'recnum': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8},
                   'state': {0: 'AL', 1: 'CO', 2: 'TX', 3: np.nan, 4: 'AL',
                             5: 'CO', 6: 'TX', 7: np.nan},
                   'zip_code': {0: 11111, 1: 22222, 2: 33333, 3: 11111,
                                4: 11111, 5: 22222, 6: 33333, 7: 22222}})

df['state'] = df.groupby('zip_code')['state'].ffill().bfill()
print(df)

df

   recnum state  zip_code
0       1    AL     11111
1       2    CO     22222
2       3    TX     33333
3       4    AL     11111
4       5    AL     11111
5       6    CO     22222
6       7    TX     33333
7       8    CO     22222