使用 for 循环将现有列中的数据添加到 pandas.DataFrame 中的新列

Add data to a new column in pandas.DataFrame from existing columns using for-loop

我有一个大型数据框,其中包含缺少某些值的温度测量值。这些值位于两个单独的列中,其中一个包含实际测量值 (TEMP),而另一列仅包含估计温度 (TEMP_ESTIMATED)。

我正在尝试创建一个新列,其中这 2 个值的组合方式是,如果该值存在(不是 NaN),新列将具有实际测量值,否则新列将具有估计值。 Example of dataframe and how I would want it to look after the for-loop.

我已经尝试了很多不同的方法来做到这一点,但 none 目前为止它们都有效。我还是编程的新手,所以如果有一些明显的错误,我深表歉意,只是想学习更多!

我上次试过但值没有添加到新列(我已经导入 pandas 并且所有温度数据都保存到 data.DataFrame):

for i in range(len(data)):
    if data.at[i, 'TEMP'] == 'NaN':
        data.at[i, 'TEMP_ALL'] = data.at[i, 'TEMP_ESTIMATED']
    else:
        data.at[i, 'TEMP_ALL'] = data.at[i, 'TEMP']

我将不胜感激任何对此的反馈或如何实现预期结果的任何替代方法,谢谢!

您可以尝试使用 np.where:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={'DATE': ['20100101', '20100102', '20100103', '20100104', '20100105'],
                        'TEMP': [np.nan, np.nan, np.nan, 15, 20],
                        'TEMP_ESTIMATED': [10, 15, 16, 17, 22]})
df = df.rename_axis('index')

df['TEMP_ALL'] = np.where(np.isnan(df.TEMP), df.TEMP_ESTIMATED, df.TEMP)
index DATE TEMP TEMP_ESTIMATED TEMP_ALL
0 20100101 nan 10 10
1 20100102 nan 15 15
2 20100103 nan 16 16
3 20100104 15 17 15
4 20100105 20 22 20

如果您的 NaN 值是字符串,请尝试:

df['TEMP_ALL'] = np.where(df.TEMP == 'NaN', df.TEMP_ESTIMATED, df.TEMP)