gpt4 book ai didi

python - 在 pandas df 中查找行并执行相对于该行位置的差异

转载 作者:行者123 更新时间:2023-12-04 03:59:58 24 4
gpt4 key购买 nike

我有一个数据库对象,它以 pandas df 的形式返回我的查询输出。

我的一个查询生成了一个日期列表 (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 ...

最佳答案

我发现我自己做了一些格式化来让你到达你想要你的格式的地方,但是:

查询 DF 1 (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

查询 DF 2 (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_value):

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

关于python - 在 pandas df 中查找行并执行相对于该行位置的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63237728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com