为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2023-07-11 14:43:23
我有两个数据框,如下所示:df1:DATE        Value1  Value204.01.05    2.754   2.75705.01.05    2.7316  2.750506.01.05    2.7546  2.756807.01.05    2.7465  2.752510.01.05    2.7385  2.741511.01.05    2.7348  2.738812.01.05    2.7348  2.738813.01.05    2.7348  2.738814.01.05    2.7365  2.743517.01.05    2.7365  2.743518.01.05    2.7365  2.743519.01.05    2.7365  2.7435df2:DATE        Value1  Value204.01.05    2.701   2.699505.01.05    2.7065  2.70507.01.05    2.6348  2.633310.01.05    2.635   2.631511.01.05    2.6275  2.626512.01.05    2.6268  2.625313.01.05    2.6285  2.62717.01.05    2.6565  2.655518.01.05    2.6275  2.62619.01.05    2.643   2.6415如果我有完全相同的日期,我下面的代码就可以工作。一旦日期不相等并且我只想计算相等的日期,它就不起作用。我的 if 语句不知何故没有过滤掉正确的日期。我想将计算值添加到 df1 中。我的代码如下所示:import pandas as pdfile1 = '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.Value1print(df1)预期输出如下:DATE        Value1  Value2  LEVEL   sub04.01.05    2.701   2.6995  1 Year  0.05305.01.05    2.7065  2.705   1 Year  0.025107.01.05    2.6348  2.6333  1 Year  0.111710.01.05    2.635   2.6315  1 Year  0.103511.01.05    2.6275  2.6265  1 Year  0.107312.01.05    2.6268  2.6253  1 Year  0.10813.01.05    2.6285  2.627   1 Year  0.106317.01.05    2.6565  2.6555  1 Year  0.0818.01.05    2.6275  2.626   1 Year  0.10919.01.05    2.643   2.6415  1 Year  0.0935这意味着仅计算相同日期的差异。
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

# this will result in merged df wtih all intersecting dates

df1 = df1.merge(df2, on = 'DATE', suffixes=('','_df2')

# the column you need

df1['sub'] = df1['Value1'] - df1['Value1_df2'] 

# next drop unnecessary columns of df2

df1.drop(columns = ['Value1_df2', 'Value2_df2'], inplace=True)


查看完整回答
反对 回复 2023-07-11
?
HUH函数

TA贡献1836条经验 获得超4个赞

首先将索引设置为'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     sub

DATE                            

04.01.05  2.7010  2.6995  0.0530

05.01.05  2.7065  2.7050  0.0251

07.01.05  2.6348  2.6333  0.1117

10.01.05  2.6350  2.6315  0.1035

11.01.05  2.6275  2.6265  0.1073

12.01.05  2.6268  2.6253  0.1080

13.01.05  2.6285  2.6270  0.1063

17.01.05  2.6565  2.6555  0.0800

18.01.05  2.6275  2.6260  0.1090

19.01.05  2.6430  2.6415  0.0935


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信