我一直在网上寻找解决方案,但找不到。也许这太简单了,我不认识解决方案,但这是我的问题。我有一个数据框,其中的行代表不同日期发生的交易。该期间的开始日期是2022年1月1日。我想创建一个新列,其中包含事务所属时间间隔的标签。我想创建 7 天的间隔。因此,如果交易日期属于自开始日期以来的前 7 天期间,那么这些交易将具有标签“间隔 1”,如果它们属于下一个 7 天期间,则它们将具有标签“间隔 2” ”。这是一个数据框作为示例
# simulated data for stack overflow
data = {'dates':pd.date_range(start="2022-01-01",end="2022-01-21"),
'values':rand(21)}
df_ex = pd.DataFrame(data)
我想要这样的东西
请注意,实际日期列没有唯一的日期。有些日子有多次交易。 我尝试过其他一些堆栈溢出答案,但他们没有回答我的具体问题。我尝试使用一些 groupby 函数和 .diff() 但无济于事
最佳答案
您可以转换to_datetime
,减去第一个日期,得到 days
的数量,并使用floordiv
+1 构建字符串:
s = pd.to_datetime(df_ex['dates'])
df_ex['interval'] = ('interval '
+s.sub(s.iloc[0]).dt.days
.floordiv(7).add(1).astype(str)
)
注意。如果日期未排序,请使用 s.min()
作为引用(而不是 s.iloc[0]
)。此方法应该可以很好地处理丢失和重复的日期。
输出:
dates values interval
0 2022-01-01 0.792507 interval 1
1 2022-01-02 0.485413 interval 1
2 2022-01-03 0.862531 interval 1
3 2022-01-04 0.216753 interval 1
4 2022-01-05 0.871699 interval 1
5 2022-01-06 0.723986 interval 1
6 2022-01-07 0.907056 interval 1
7 2022-01-08 0.618148 interval 2
8 2022-01-09 0.173755 interval 2
9 2022-01-10 0.218576 interval 2
10 2022-01-11 0.510574 interval 2
11 2022-01-12 0.832323 interval 2
12 2022-01-13 0.321287 interval 2
13 2022-01-14 0.721609 interval 2
14 2022-01-15 0.472324 interval 3
15 2022-01-16 0.492423 interval 3
16 2022-01-17 0.061945 interval 3
17 2022-01-18 0.161257 interval 3
18 2022-01-19 0.148596 interval 3
19 2022-01-20 0.047933 interval 3
20 2022-01-21 0.078941 interval 3
关于python - 如何根据开始时间的 7 天间隔在数据框中创建一个带有组标签的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73867858/