假设我有数据:
a b
0 1.0 NaN
1 6.0 1
2 3.0 NaN
3 1.0 NaN
我想遍历此数据以查看,
if Data[i] == NaN **and** column['a'] == 1.0
然后将NAN替换为4,而不是在您看到的任何NaN中将其替换为4。我该怎么办?我尝试了所有的if函数,但是没有用。我也做过
for i in df.itertuples():
但是问题是df.itertuples()
没有替换功能,我见过的其他方法是一个接一个地完成。
最终结果寻找:
a b
0 1.0 4
1 6.0 1
2 3.0 NaN
3 1.0 4
答案 0 :(得分:1)
def func(x):
if x['a'] == 1 and pd.isna(x['b']):
x['b'] = 4
return x
df = pd.DataFrame.from_dict({'a': [1.0, 6.0, 3.0, 1.0], 'b': [np.nan, 1, np.nan, np.nan]})
df.apply(func, axis=1)
使用iterrows()
代替apply()
可能是更好的选择。
答案 1 :(得分:1)
您可以创建一个遮罩,然后使用该遮罩填充所需的NaN:
df = pd.DataFrame({'a': [1,6,3,1], 'b': [np.nan, 1, np.nan, np.nan]})
mask = df[['a', 'b']].apply(lambda x: (x[0] == 1) and (pd.isna(x[1])), axis=1)
df['b'] = df['b'].mask(mask, df['b'].fillna(4))
print(df)
a b
0 1 4.0
1 6 1.0
2 3 NaN
3 1 4.0
答案 2 :(得分:1)
svymean(~age + fpl + gender + persWeight + psu + strata, ageDesign, na.rm = TRUE)
这可以帮助您吗?
答案 3 :(得分:0)
就像您说的那样,您可以通过组合两个条件来实现此目的:a == 1和b == Nan。
要在python中组合两个条件,可以使用&。
在您的示例中:
import pandas as pd
import numpy as np
# Create sample data
d = {'a': [1, 6, 3, 1], 'b': [np.nan, 1, np.nan, np.nan]}
df = pd.DataFrame(data=d)
# Convert to numeric
df = df.apply(pd.to_numeric, errors='coerce')
print(df)
# Replace Nans
df[ (df['a'] == 1 ) & np.isnan(df['b']) ] = 4
print(df)
应该做到这一点。