我有两个 Dataframe ,df_rates和df_profit,如下所示。df_rates有一个时间-日期值,其列名的值为某些比率,索引值表示该列的时间-日期值之前的分钟数。(即,第1行表示2012-03-31 23:45:00之前的0分钟,第2行表示2012-03-31 23:45:00之前的5分钟,以此类推)。而df_profit有时间戳作为其索引,并有一个利润列。
我想在以下条件下将df_profit中的Profit列作为新列添加到df_rates中:
如果df_profit索引处的时间戳(2012-03-31 23:45:00)与df_rates列名(2012-03-31 23:45:00)匹配,则使用相应的利润值(354.664)填充新列。
df_profit的利润列中的下一个值(125.76),其中时间戳为“2012-03-31 23:30:00”,应根据“时间之前的分钟数”为15的行填充到新列中,依此类推。(由于2012-03-31 23:45:00和2012-03-31 23:30:00之间的时间差为15分钟)
我一直在尝试很多如何做,但我不知所措。有人能帮助或指导这一点吗?
df_rates
Mins before time 2012-03-31 23:45:00
0 113.1
5 112.1
10 113.1
15 113.17
20 103.17
25 133.17
30 101.39
df_profit
Profit
2012-04-01 00:30:00 251.71
2012-04-01 00:15:00 652.782
2012-04-01 00:00:00 458.099
2012-03-31 23:45:00 3504.664
2012-03-31 23:30:00 1215.76
2012-03-31 23:15:00 -21.48
2012-03-31 23:00:00 -8.538
Expected dataframe:
Mins before time 2022-01-31 23:45:00+01:00 New_column
0 113.1 3504.664
5 112.1
10 113.1
15 113.17 1215.76
20 103.17
25 133.17
30 101.39 -21.48
2条答案
按热度按时间pcww981p1#
作为原始答案的替代(见下文),这里有一个非常直接的方法来完成OP的要求:
输出:
说明:
pd.to_datetime()
中)中减去使用Mins before time
列创建的一系列时间增量值(单位为分钟),创建一系列时间戳reindex
创建一系列利润数字,这些数字与df_rates列平行,并包含df_profit中的Profit
值,其中df_profit索引中的时间戳标签与上一步中创建的时间戳系列中的标签完全匹配,其他位置为NaNto_numpy
的numpy数组,并使用它初始化df_rates中标记为Profit
(或任何其他所需的标记)的新列。原答复:
下面是一个方法:
输出:
解释
pd.to_datetime()
)加上一系列等于Mins before time
列的时间增量值(单位为分钟)join
在索引值匹配的行中添加一个具有非空值的Profit
列,并重置索引。8iwquhpp2#
您可以定义一个函数来获取相应时间戳的利润:
(我假设
df_profit
索引包含datetime数据类型;否则,请编辑代码以将dTime
转换为匹配的数据类型。)要获取新列的所有值:
如果你把它当作
那么
df_rates
看起来就像