在Python的for循环中从具有相同日期的两个数据帧的列中减去值时出现问题

我有两个数据框,如下所示:


df1:


DATE        Value1  Value2

04.01.05    2.754   2.757

05.01.05    2.7316  2.7505

06.01.05    2.7546  2.7568

07.01.05    2.7465  2.7525

10.01.05    2.7385  2.7415

11.01.05    2.7348  2.7388

12.01.05    2.7348  2.7388

13.01.05    2.7348  2.7388

14.01.05    2.7365  2.7435

17.01.05    2.7365  2.7435

18.01.05    2.7365  2.7435

19.01.05    2.7365  2.7435

df2:


DATE        Value1  Value2

04.01.05    2.701   2.6995

05.01.05    2.7065  2.705

07.01.05    2.6348  2.6333

10.01.05    2.635   2.6315

11.01.05    2.6275  2.6265

12.01.05    2.6268  2.6253

13.01.05    2.6285  2.627

17.01.05    2.6565  2.6555

18.01.05    2.6275  2.626

19.01.05    2.643   2.6415

如果我有完全相同的日期,我下面的代码就可以工作。一旦日期不相等并且我只想计算相等的日期,它就不起作用。我的 if 语句不知何故没有过滤掉正确的日期。我想将计算值添加到 df1 中。


我的代码如下所示:


import pandas as pd


file1 = 'File1.csv'

file2 = 'File2.csv'


df1 = pd.read_csv(file1, sep=';')

df1['DATE'] = pd.to_datetime(df1.DATE)


df2 = pd.read_csv(file2, sep=';')

df2['DATE'] = pd.to_datetime(df2.DATE)


for date1 in df1['DATE']:

    for date2 in df2['DATE']:

        if date1 == date2:

            print(date1, date2)

            df1['sub'] = df1.Value1 - df2.Value1


print(df1)

预期输出如下:


DATE        Value1  Value2  LEVEL   sub

04.01.05    2.701   2.6995  1 Year  0.053

05.01.05    2.7065  2.705   1 Year  0.0251

07.01.05    2.6348  2.6333  1 Year  0.1117

10.01.05    2.635   2.6315  1 Year  0.1035

11.01.05    2.6275  2.6265  1 Year  0.1073

12.01.05    2.6268  2.6253  1 Year  0.108

13.01.05    2.6285  2.627   1 Year  0.1063

17.01.05    2.6565  2.6555  1 Year  0.08

18.01.05    2.6275  2.626   1 Year  0.109

19.01.05    2.643   2.6415  1 Year  0.0935

这意味着仅计算相同日期的差异。


倚天杖
浏览 114回答 2
2回答

红颜莎娜

# this will result in merged df wtih all intersecting datesdf1 = df1.merge(df2, on = 'DATE', suffixes=('','_df2')# the column you needdf1['sub'] = df1['Value1'] - df1['Value1_df2'] # next drop unnecessary columns of df2df1.drop(columns = ['Value1_df2', 'Value2_df2'], inplace=True)

HUH函数

首先将索引设置为'DATE'使其对齐。然后我们减去。由于您似乎希望将输出添加到df2我们将执行-(df2 - df1)的操作与(df1 - df2)df1 = df1.set_index('DATE')df2 = df2.set_index('DATE')df2['sub'] = -df2['Value1'].sub(df1['Value1'])          Value1  Value2     subDATE                            04.01.05  2.7010  2.6995  0.053005.01.05  2.7065  2.7050  0.025107.01.05  2.6348  2.6333  0.111710.01.05  2.6350  2.6315  0.103511.01.05  2.6275  2.6265  0.107312.01.05  2.6268  2.6253  0.108013.01.05  2.6285  2.6270  0.106317.01.05  2.6565  2.6555  0.080018.01.05  2.6275  2.6260  0.109019.01.05  2.6430  2.6415  0.0935
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python