在数据行中查找行并执行相对于该行位置的差异

2024-10-03 17:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据库对象,它将我的查询输出作为数据返回

我的一个查询生成日期列表(df1):

      data_interestDate
0  2020-07-15T00:00:00
1  2020-06-11T00:00:00
2  2020-05-14T00:00:00
3  2020-04-14T00:00:00

另一个查询返回与几个日期对应的值列表(df2):

              data_date value
0   2020-07-21T00:00:00  47.0
1   2020-07-20T00:00:00  46.0
2   2020-07-17T00:00:00  50.0
3   2020-07-16T00:00:00  46.0
4   2020-07-15T00:00:00  48.0
5   2020-07-14T00:00:00  49.0
6   2020-07-13T00:00:00  48.0
7   2020-07-10T00:00:00  49.0
8   2020-07-09T00:00:00  46.0
9   2020-07-08T00:00:00  51.0
10  2020-07-07T00:00:00  49.0
11  2020-07-06T00:00:00  53.0

我想遍历df1并在df2中找到匹配的日期。一旦我有了它,在df2中,我想取对应于该日期的值和该日期之前的值x行数之间的差值。 例如,对于df1中的2020-07-15T00:00:00,我会在df2中找到该日期,然后执行如下操作:

(df2['value']-df2['value'].shift(-5)).iloc()[0] 

它应该返回3.0,然后是

2020-07-15T00:00:00  -5  3.0
2020-06-11T00:00:00  -5  ...
2020-05-14T00:00:00  -5  ...
2020-04-14T00:00:00  -5  ...

Tags: 数据对象数据库列表datadateshiftvalue
1条回答
网友
1楼 · 发布于 2024-10-03 17:22:36

我发现自己正在做一些格式化工作,以使您达到您想要的格式,但是:

查询df1(df1):

df1.head()

data_interestDate
0   2020-07-15T00:00:00
1   2020-06-11T00:00:00
2   2020-05-14T00:00:00
3   2020-04-14T00:00:00

查询df2(df2):

df2.head()

    data_date   value
0   2020-07-21T00:00:00 47.0
1   2020-07-20T00:00:00 46.0
2   2020-07-17T00:00:00 50.0
3   2020-07-16T00:00:00 46.0
4   2020-07-15T00:00:00 48.0

确定您的班次值:

shift_val = -5

设置您的文字列(因为您想要的输出有它):

df2['shift'] = shift_val

生成一个带有“diff”列的df2,给出value和value.shift的绝对值差(shift\u值):

df2.loc[(df2['data_date'].isin(df1['data_interestDate'])), 'diff'] = abs(pd.to_numeric(df2['value'])-pd.to_numeric(df2['value'].shift(shift_val)))

您的问题似乎表明您希望返回df2,但您的示例显示了df1返回。这两个都是:

返回df1(作为df3):

df3 = df1.merge(df2, left_on='data_interestDate', right_on='data_date', how='left').drop(['data_date','value'], axis=1)
df3['shift'] = shift_val

在这里,我们确实丢失了连接上的移位值,所以它被加回去了(这个不知道)。 产出:

df3.head()

    data_interestDate   shift   diff
0   2020-07-15T00:00:00 -5  3.0
1   2020-06-11T00:00:00 -5  NaN
2   2020-05-14T00:00:00 -5  NaN
3   2020-04-14T00:00:00 -5  NaN

返回df2(作为df3):

df3 = df2[df2['data_date'].isin(df1['data_interestDate'])].drop(['value'],axis=1)

产出:

df3.head()

data_date   shift   diff
4   2020-07-15T00:00:00 -5  3.0

相关问题 更多 >