我有一个来自SQL查询的框架,看起来与此设置相当:
df = pd.DataFrame({
'ID': [1, 3, 1, 2, 2, 2, 3, 1, 3, 4, 4, 5, 6, 7],
'ID_Type': ['A', 'C', 'A', 'B', 'B', 'B', 'C', 'A', 'C', 'A', 'A', 'B', 'C', 'C'],
'Type_A_Value': [10, None, 10, None, None, None, None, 30, None, 55, 40, None, None, None],
'Type_B_Value': [None, None, None, 10, 11, 26, None, None, None, None, None, 19, None, None],
'Type_C_Value': [None, 4.3, None, None, None, None, 89, None, 12.3, None, None, None, 27, 55],
'Datetime': ['2022-10-03 08:00:00', '2022-10-01 09:00:00', '2022-10-02 08:00:00',
'2022-10-01 11:00:00', '2022-10-02 11:00:00', '2022-10-02 13:00:00',
'2022-10-01 14:00:00', '2022-10-01 15:00:00', '2022-10-02 07:00:00',
'2022-10-01 14:00:00', '2022-10-01 15:00:00', '2022-10-02 07:00:00',
'2022-09-01 14:00:00', '2022-10-01 01:00:00'] })
我在找一种方法来检查相隔24小时的重复信息。一般来说,重复可能是可以的,但是如果10日上午10点的数据和11日上午10点的数据是相同的,我想强调这一点,也许用布尔列。
总结一下我到目前为止所做的尝试:
- 按日期时间对 Dataframe 排序和索引
df['Datetime'] = pd.to_datetime(df['Datetime'])
df = df.sort_values(['ID_Type', 'ID', 'Datetime'])
df = df.set_index('Datetime')
- 使用df.shift函数(如果使用DateTime作为索引,则不起作用,如果不是索引,则给出NotImplementedError)
df['24HoursAgo'] = df['Datetime'].shift(-1, freq='24H')
- 创建一个布尔列,检查24小时内的值是否相同(有缺陷,因为它也不会考虑设备ID)
grouped_df['SameValue24hoursApart'] = grouped_df['Type_A_Value'] == grouped_df['Type_A_Value'].shift(-1, freq='24H')
从本质上讲,我需要的是能够按设备类型和ID(或只是ID,因为ID不能有一个以上的类型)分组,然后检查该ID是否有数据重复,其各自的类型列,这是24小时分开
(编辑以包括重复示例)
1条答案
按热度按时间yfwxisqw1#
你的例子中没有这样的数据,但是你确实可以使用排序比较:
输出量:
或者,如果你想在比较中使用所有列,那么你可以将24h添加到日期时间并计算
merge
:如果有任何重复,这将在“index”列中添加索引: