根据值分组填充空值
Fill nulls based on a group by value
我有以下df
id1 id2 uid . . .
1 100 na
1 101 1000
1 101 1000
2 102 1001
2 103 na
3 104 1002
3 104 1002
3 104 1002
3 104 na
3 105 na
3 106 na
我想按 id1
分组并填写 uid
我尝试使用以下代码段进行 min/max 填充:
`df['uid'] = df.groupby(['id1']).transform(lambda x: x.fillna(x.max()))`
填充 na min 或 max 应该以任何一种方式工作,因为每个 id1 应该有一个不同的 uid,但是它返回不同的值,所以它可能会妨碍我填充值
期望的输出:
id1 id2 uid . . .
1 100 1000
1 101 1000
1 101 1000
2 102 1001
2 103 1001
3 104 1002
3 104 1002
3 104 1002
3 104 1002
3 105 1002
3 106 1002
尝试使用x.ffill().bfill()
:
df = pd.DataFrame(
{'id1': [1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3], 'id2': [100, 101, 101, 102, 103, 104, 104, 104, 104, 105, 106],
'uid': [np.nan, 1000, 1000, 1001, np.nan, 1002, 1002, 1002, np.nan, np.nan, np.nan]}, dtype='object')
df['uid'] = df.groupby(['id1']).uid.transform(lambda x: x.ffill().bfill()).astype(int)
print(df)
打印:
id1 id2 uid
0 1 100 1000
1 1 101 1000
2 1 101 1000
3 2 102 1001
4 2 103 1001
5 3 104 1002
6 3 104 1002
7 3 104 1002
8 3 104 1002
9 3 105 1002
10 3 106 1002
我有以下df
id1 id2 uid . . .
1 100 na
1 101 1000
1 101 1000
2 102 1001
2 103 na
3 104 1002
3 104 1002
3 104 1002
3 104 na
3 105 na
3 106 na
我想按 id1
分组并填写 uid
我尝试使用以下代码段进行 min/max 填充:
`df['uid'] = df.groupby(['id1']).transform(lambda x: x.fillna(x.max()))`
填充 na min 或 max 应该以任何一种方式工作,因为每个 id1 应该有一个不同的 uid,但是它返回不同的值,所以它可能会妨碍我填充值
期望的输出:
id1 id2 uid . . .
1 100 1000
1 101 1000
1 101 1000
2 102 1001
2 103 1001
3 104 1002
3 104 1002
3 104 1002
3 104 1002
3 105 1002
3 106 1002
尝试使用x.ffill().bfill()
:
df = pd.DataFrame(
{'id1': [1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3], 'id2': [100, 101, 101, 102, 103, 104, 104, 104, 104, 105, 106],
'uid': [np.nan, 1000, 1000, 1001, np.nan, 1002, 1002, 1002, np.nan, np.nan, np.nan]}, dtype='object')
df['uid'] = df.groupby(['id1']).uid.transform(lambda x: x.ffill().bfill()).astype(int)
print(df)
打印:
id1 id2 uid
0 1 100 1000
1 1 101 1000
2 1 101 1000
3 2 102 1001
4 2 103 1001
5 3 104 1002
6 3 104 1002
7 3 104 1002
8 3 104 1002
9 3 105 1002
10 3 106 1002