我有一个 df
,它有 3 列:recnum
、state
和 zip_code
。 state
列缺少值,我想根据匹配的 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 |
答案 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