对 df 的 nan 值的不同处理
different handling of nan values of a df
我有一个这样的 df:
A B
0 1 5
1 1 7
2 NaN NaN
3 1 8
4 NaN NaN
5 NaN NaN
6 2 6
7 2 2
8 NaN NaN
9 NaN NaN
10 2 3
现在我想在事件中以不同于外部的方式填充 nan 值。一个事件由 A 列标识并且具有相同的值(在我的示例中有事件 1 和 2)。 A 列应仅包含事件中的事件编号。对于 B 列,应传输事件中的最后一个条目。
在事件之间,NaN 值应设置为“0”。
我尝试了 ffill()
和 fillna()
,但不符合我的条件。
预期结果:
A B
0 1 5
1 1 7
2 1 7
3 1 8
4 0 0
5 0 0
6 2 6
7 2 2
8 2 2
9 2 2
10 2 3
感谢您的帮助:)
您可以使用 GroupBy.ffill
with helper groups created by Series.mask
并通过回溯值进行比较以防止组间遗漏值,最后将缺失值替换为 0
和整数:
s = df.A.ffill()
g = df.A.mask(s.eq(df.A.bfill()), s)
df = df.groupby(g).ffill().fillna(0).astype(int)
print (df)
A B
0 1 5
1 1 7
2 1 7
3 1 8
4 0 0
5 0 0
6 2 6
7 2 2
8 2 2
9 2 2
10 2 3
我有一个这样的 df:
A B
0 1 5
1 1 7
2 NaN NaN
3 1 8
4 NaN NaN
5 NaN NaN
6 2 6
7 2 2
8 NaN NaN
9 NaN NaN
10 2 3
现在我想在事件中以不同于外部的方式填充 nan 值。一个事件由 A 列标识并且具有相同的值(在我的示例中有事件 1 和 2)。 A 列应仅包含事件中的事件编号。对于 B 列,应传输事件中的最后一个条目。 在事件之间,NaN 值应设置为“0”。
我尝试了 ffill()
和 fillna()
,但不符合我的条件。
预期结果:
A B
0 1 5
1 1 7
2 1 7
3 1 8
4 0 0
5 0 0
6 2 6
7 2 2
8 2 2
9 2 2
10 2 3
感谢您的帮助:)
您可以使用 GroupBy.ffill
with helper groups created by Series.mask
并通过回溯值进行比较以防止组间遗漏值,最后将缺失值替换为 0
和整数:
s = df.A.ffill()
g = df.A.mask(s.eq(df.A.bfill()), s)
df = df.groupby(g).ffill().fillna(0).astype(int)
print (df)
A B
0 1 5
1 1 7
2 1 7
3 1 8
4 0 0
5 0 0
6 2 6
7 2 2
8 2 2
9 2 2
10 2 3