我有数据框df
,有5行3列,按日期索引:
OA_Year 0 1 2
1968 12.0 2.0 NaN
1969 2.0 1.0 1.0
1970 8.0 4.0 2.0
1971 8.0 4.0 2.0
1972 0.0 3.0 1.0
我正在尝试编写一个for
循环,如果列2包含NaN
的值,将添加列0和1中的条目。现在,我让结果等于一些更简单的东西来测试循环是否有效。
for i in range(5):
if df.iloc[i, 2] == np.nan:
result = np.nan
else:
result = 'False'
print(result)
而不是获得NaN
和'False'的列表,我只得到'False'的结果。这就是我想要得到的:
1968 NaN
1969 False
1970 False
1971 False
1972 False
我不完全确定我理解你需要什么,但通常-你不一定需要一个for循环来实现你想要的。例如,这将对列0和列1中列2不包含nan
的值求和。
import pandas as pd
df = pd.DataFrame({'Year': [1990, 1991, 1992, 1993], '0': np.random.rand(4), '1': np.random.rand(4), '2': [np.nan, 1, 2, 1]})
df[~df['2'].isna()][['0','1']].sum(axis = 1)
由于需求不明确,请查看这是否是您想要的:
如果列2
包含NaN
的值,则将列0
和1
中的表项添加到列2
中:
在这里,我们使用.fillna()
用0
和1
两列的和来填充2
列中的NaN
值:
df['2'] = df['2'].fillna(df['0'] + df['1'])
或使用:
df['2'] = df['2'].fillna(df[['0', '1']].sum(axis=1))
结果:print(df)
OA_Year 0 1 2
0 1968 12.0 2.0 14.0
1 1969 2.0 1.0 1.0
2 1970 8.0 4.0 2.0
3 1971 8.0 4.0 2.0
4 1972 0.0 3.0 1.0