用行中的最大值替换 DataFrame 中的空值
Replace Nulls in DataFrame with Max in Row
有没有一种方法(比使用 for 循环更有效)用相应行中的最大值替换 Pandas' DataFrame 中的所有空值。
我想这就是您要找的:
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 0], 'b': [3, 0, 10], 'c':[0, 5, 34]})
a b c
0 1 3 0
1 2 0 5
2 0 10 34
您可以使用 apply
,遍历所有行并使用 replace
函数将 0 替换为行的最大数,该函数可为您提供预期的输出:
df.apply(lambda row: row.replace(0, max(row)), axis=1)
a b c
0 1 3 3
1 2 5 5
2 34 10 34
如果您想替换 NaN
- 根据您的评论,这似乎是您的实际目标 -
df = pd.DataFrame({'a': [1, 2, np.nan], 'b': [3, np.nan, 10], 'c':[np.nan, 5, 34]})
a b c
0 1.0 3.0 NaN
1 2.0 NaN 5.0
2 NaN 10.0 34.0
df.T.fillna(df.max(axis=1)).T
屈服
a b c
0 1.0 3.0 3.0
1 2.0 5.0 5.0
2 34.0 10.0 34.0
这可能比
更有效率(还没有完成计时)
df.apply(lambda row: row.fillna(row.max()), axis=1)
请注意
df.apply(lambda row: row.fillna(max(row)), axis=1)
并非如所解释的那样在每种情况下都起作用 。
有没有一种方法(比使用 for 循环更有效)用相应行中的最大值替换 Pandas' DataFrame 中的所有空值。
我想这就是您要找的:
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 0], 'b': [3, 0, 10], 'c':[0, 5, 34]})
a b c
0 1 3 0
1 2 0 5
2 0 10 34
您可以使用 apply
,遍历所有行并使用 replace
函数将 0 替换为行的最大数,该函数可为您提供预期的输出:
df.apply(lambda row: row.replace(0, max(row)), axis=1)
a b c
0 1 3 3
1 2 5 5
2 34 10 34
如果您想替换 NaN
- 根据您的评论,这似乎是您的实际目标 -
df = pd.DataFrame({'a': [1, 2, np.nan], 'b': [3, np.nan, 10], 'c':[np.nan, 5, 34]})
a b c
0 1.0 3.0 NaN
1 2.0 NaN 5.0
2 NaN 10.0 34.0
df.T.fillna(df.max(axis=1)).T
屈服
a b c
0 1.0 3.0 3.0
1 2.0 5.0 5.0
2 34.0 10.0 34.0
这可能比
更有效率(还没有完成计时)df.apply(lambda row: row.fillna(row.max()), axis=1)
请注意
df.apply(lambda row: row.fillna(max(row)), axis=1)
并非如所解释的那样在每种情况下都起作用