与这一个斗争…
我有一个大的数据框,其中包含三列分组(A、B、C)和两列日期时间范围(StartTime、EndTime),最后一列名为Blocks的值。
我需要将三个元素组合在一起:A,B,C ->和计数“循环”的数量,其中下一行的StartTime在当前行的StartTime的1天内。
->所以在分组A-B-C之后;如果我们有两个块,一个在7/19/23结束,另一个在7/20/23开始,那么我们在输出中将其计数为1个“周期”(我试图过滤掉匹配项,以便稍后我可以只计算值)
尝试:
df.sort_values(by=['A', 'B', 'C', 'StartTime'], inplace=True)
df['DaysBetween'] = ( df['EndTime'] - df['StartTime'] ).dt.days
mask = (
(df['EndTime'] != df['StartTime'].shift(-1) + pd.Timedelta(days=1)) & \
(df['A'] == df['A'].shift(-1)) & \
(df['B'] == df['B'].shift(-1)) & \
(df['C'] == df['C'].shift(-1))
)
filter_df = sb[mask] # Filtering out the matching Blocks to later count the number of cycles
filter_df.reset_index(drop=True, inplace=True)
cycle_count = filter_df.groupby(['A', 'B', 'C'])['Blocks'].nunique().reset_index(name="CountCycles")
字符串
这种方法是可行的,但是我丢失了只有一个块的行,并且不知道如何保留它们。
1条答案
按热度按时间dwbf0jvd1#
字符串
输出量:
型