如何根据熊猫数据框中的其他列填充缺失值?


19

假设我有一个5 * 3数据框,其中第三列包含缺失值

1 2 3
4 5 NaN
7 8 9
3 2 NaN
5 6 NaN

我希望为基于缺失值的规则生成价值,即第一产品第二列

1 2 3
4 5 20 <--4*5
7 8 9
3 2 6 <-- 3*2
5 6 30 <-- 5*6

如何使用数据框?谢谢。

如何添加条件以计算像这样的缺失值?

if 1st % 2 == 0 then 3rd = 1st * 2nd else 3rd = 1st + 2nd

1 2 3
4 5 20 <-- 4*5 because 4%2==0
7 8 9
3 2 5 <-- 3+2 because 3%2==1
5 6 11 <-- 5+6 because 5%2==1

您无法执行此操作,因为大小将不相等
Mayur Dangar '18

你能扩大答案吗?为什么不可能,他可能怎么做才能解决问题?
Damian Melniczuk '18

嘿,即使我有同样的问题。但是,如果我处理的数据是文本的,该怎么办?那就是条件就像“如果'成分'包含鸡肉,那么'类型'=非蔬菜”
user7389747

Answers:


17

假设你的数据框的三列的abc。这就是你想要的:

df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

完整代码:

df = pd.DataFrame(
    np.array([[1, 2, 3], [4, 5, np.nan], [7, 8, 9], [3, 2, np.nan], [5, 6, np.nan]]), 
    columns=['a', 'b', 'c']
)
df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

迟了几年,但这仅在列为数字时才起作用。np.isnan不支持非数字数据。这在这里不是问题,因为OP具有数字列和算术运算符,但否则pd.isnull是更好的选择。
Adarsh Chavakula

3

另外的选择:

df.loc[(pd.isnull(df.C)), 'C'] = df.A * df.B



2

假设你的数据框的三列abc。然后,您可以执行所需的操作,如下所示:

values = df['a'] * df['b']
df['c'] = values.where(df['c'] == np.nan, others=df['c'])

1
np.where(pd.isnull(df.c), df.a * df.b, df.c)
Valentas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.