我有一个名为的数据框df:
Date Sales
01/01/2020 812
02/01/2020 981
03/01/2020 923
04/01/2020 1033
05/01/2020 988
... ...
Run Code Online (Sandbox Code Playgroud)
如何获得销售额超过 1000 的连续 7 天的第一次出现?
这就是我要查找销售额高于 1000 的行的操作:
In [221]: df.loc[df["sales"] >= 1000]
Out [221]:
Date Sales
04/01/2020 1033
08/01/2020 1008
09/01/2020 1091
17/01/2020 1080
18/01/2020 1121
19/01/2020 1098
... ...
Run Code Online (Sandbox Code Playgroud) 我正在尝试按连续日期对ID进行分组.
ID Date
abc 2017-01-07
abc 2017-01-08
abc 2017-01-09
abc 2017-12-09
xyz 2017-01-05
xyz 2017-01-06
xyz 2017-04-15
xyz 2017-04-16
Run Code Online (Sandbox Code Playgroud)
需要退货:
ID Count
abc 3
abc 1
xyz 2
xyz 2
Run Code Online (Sandbox Code Playgroud)
我试过了:
d = {'ID': ['abc', 'abc', 'abc', 'abc', 'xyz', 'xyz', 'xyz', 'xyz'], 'Date': ['2017-01-07','2017-01-08', '2017-01-09', '2017-12-09', '2017-01-05', '2017-01-06', '2017-04-15', '2017-04-16']}
df = pd.DataFrame(data=d)
df['Date'] = pd.to_datetime(df['Date'])
today = pd.to_datetime('2018-10-23')
x = df.sort_values('Date', ascending=0)
g = x.groupby(['ID'])
x[(today - x['Date']).dt.days == g.cumcount()].groupby(['ID']).size()
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以通过ID获取所有日期范围的计数?
我有一个数据框df:
df =
index date hats
A1 01-01-2020 5
A1 02-01-2020 10
A1 03-01-2020 16
A1 04-01-2020 16
A1 21-01-2020 9
A1 22-01-2020 8
A1 23-01-2020 7
A6 20-03-2020 5
A6 21-03-2020 5
A8 30-07-2020 12
Run Code Online (Sandbox Code Playgroud)
这里,前四行是连续的天数。我想知道数据框中所有这些连续天数的开始日期和结束日期。如果像 wiseA8索引那样的系列中只有一天,df那么开始日期和结束日期将相同。此外,我也有兴趣了解df['hats']连续天数系列中列中的最高值,并将其日期与其 datehigh_hat一起返回到单独的列中high_hat_date。如果在一系列连续天数中有两个或更多相等的高值,则在新列中num_hat写入高值出现的次数,并在 中写入第一个出现日期high_hat_date。
上述数据框的示例输出如下:
index start_date end_date high_hat high_hat_date num_hat
A1 01-01-2020 04-01-2020 16 03-01-2020 2
A1 21-01-2020 23-01-2020 9 21-01-2020 1
A6 20-03-2020 21-03-2020 5 20-03-2020 …Run Code Online (Sandbox Code Playgroud)