有效替换熊猫df中的值,这些值是df中其他值的总和

时间:2020-04-02 19:39:58

标签: python pandas dataframe

我真的是编码新手,我试图找出一种简洁的方法来处理一些模型化的流数据以与实际测量值进行比较。我有一个数据帧,其中一列中有测量的流量,而另一列中有建模的流量。问题在于,其中两个建模流必须是其他几个建模流的总和。更麻烦的是,并非所有建模流都具有要比较的测量值。实际的数据集比这个更大,并且有点复杂。 例如,假设我具有以下数据框:

# create example data    
data = {'Stream': ['str_1', 'str_2', 'str_3', 'str_4', 'str_5', 'str_6', 'str_7', 'str_8'], \
        'BaseFlow':['NaN', 45, 214, 'NaN', 212, 32, 'NaN', 'NaN'], \
        'ModeledFlow': [ 12.4, 33.1, 123.5, 223.8, 201.4, 45.0, 57.7, 15.3]}

# create a pandas dataframe
df  = pd.DataFrame(data)

# Use 'Stream' column to index the df
df = df.set_index('Stream', inplace=False)

让我们说,对于“ str_3”,ModeledFlow必须是其自身和“ str_2”的总和,而“ str_5”的ModeledFlow必须是其自身与“ str_1”,“ str_6”和“ str_7”的和。

当前,我正在执行以下操作,这将创建一个只有两个值的新列“ CombinedFlow”:

df.loc['str_3', 'CombinedFlow'] = \
    (df.loc['str_3', 'ModeledFlow'] + \
    df.loc['str_2', 'ModeledFlow'])

df.loc['str_5', 'CombinedFlow'] = \
    (df.loc['str_5', 'ModeledFlow'] + \
    df.loc['str_1', 'ModeledFlow'] + \
    df.loc['str_6', 'ModeledFlow'] + \
    df.loc['str_7', 'ModeledFlow'])

然后,我需要用合计的CombinedFlow值替换这2个流的ModeledFlow值,以导出到csv,然后绘制所有具有MeasuredFlow值的值以进行比较。我猜想我也需要删除具有NaN值的行吗?进行此过程的最佳方法是什么?

此外,每个建模的流都来自一个单独的输出文件,该文件将每个单元的所有排水值相加并输出一个numpy数组。然后将每个numpy数组合并为一个熊猫数据帧。这就是上面显示的示例。该零件将自动处理可能添加到模型中的任何其他输出文件。但是,如果将更多的流添加到生产线的下游,是否可以设置该流程,使其能够处理仅保留2列(BaseFlow和ModeledFlow)的新流数据,并删除CombinedFlow以便在图中进行最终数据分析? / p>

如果有人能想到一个更好的“问题”标题来阐明我的要求,那也会有所帮助!

0 个答案:

没有答案