【问题标题】:Only keep rows between specific time ranges in pandas dataframe仅在熊猫数据框中的特定时间范围之间保留行
【发布时间】:2021-04-04 14:43:30
【问题描述】:

我有以下数据框:

activity_level2
                          Date_and_time  ...  walking_frame
Date_and_time                            ...               
2020-07-24 23:00:00 2020-07-24 23:00:00  ...              0
2020-07-24 23:01:00 2020-07-24 23:01:00  ...              0
2020-07-24 23:02:00 2020-07-24 23:02:00  ...              0
2020-07-24 23:03:00 2020-07-24 23:03:00  ...              0
2020-07-24 23:04:00 2020-07-24 23:04:00  ...              0
2020-07-24 23:05:00 2020-07-24 23:05:00  ...              0
2020-07-24 23:06:00 2020-07-24 23:06:00  ...              0
2020-07-24 23:07:00 2020-07-24 23:07:00  ...              0
2020-07-24 23:08:00 2020-07-24 23:08:00  ...              0
2020-07-24 23:09:00 2020-07-24 23:09:00  ...              0
2020-07-24 23:10:00 2020-07-24 23:10:00  ...              0
2020-07-24 23:11:00 2020-07-24 23:11:00  ...              0
2020-07-24 23:12:00 2020-07-24 23:12:00  ...              0
2020-07-24 23:13:00 2020-07-24 23:13:00  ...              0
2020-07-24 23:14:00 2020-07-24 23:14:00  ...              0
2020-07-24 23:15:00 2020-07-24 23:15:00  ...              0
2020-07-24 23:16:00 2020-07-24 23:16:00  ...              0
2020-07-24 23:17:00 2020-07-24 23:17:00  ...              0
2020-07-24 23:18:00 2020-07-24 23:18:00  ...              0
2020-07-24 23:19:00 2020-07-24 23:19:00  ...              0
2020-07-24 23:20:00 2020-07-24 23:20:00  ...              0
2020-07-24 23:21:00 2020-07-24 23:21:00  ...              0
2020-07-24 23:22:00 2020-07-24 23:22:00  ...              0
2020-07-24 23:23:00 2020-07-24 23:23:00  ...              0
2020-07-24 23:24:00 2020-07-24 23:24:00  ...              0
2020-07-24 23:25:00 2020-07-24 23:25:00  ...              0
2020-07-24 23:26:00 2020-07-24 23:26:00  ...              0
2020-07-24 23:27:00 2020-07-24 23:27:00  ...              1
2020-07-24 23:28:00 2020-07-24 23:28:00  ...              1
2020-07-24 23:29:00 2020-07-24 23:29:00  ...              1
2020-07-24 23:30:00 2020-07-24 23:30:00  ...              1
2020-07-24 23:31:00 2020-07-24 23:31:00  ...              1
2020-07-24 23:32:00 2020-07-24 23:32:00  ...              1
2020-07-24 23:33:00 2020-07-24 23:33:00  ...              1
2020-07-24 23:34:00 2020-07-24 23:34:00  ...              1
2020-07-24 23:35:00 2020-07-24 23:35:00  ...              1
2020-07-24 23:36:00 2020-07-24 23:36:00  ...              1
2020-07-24 23:37:00 2020-07-24 23:37:00  ...              1
2020-07-24 23:38:00 2020-07-24 23:38:00  ...              1
2020-07-24 23:39:00 2020-07-24 23:39:00  ...              1
2020-07-24 23:40:00 2020-07-24 23:40:00  ...              1
2020-07-24 23:41:00 2020-07-24 23:41:00  ...              1
2020-07-24 23:42:00 2020-07-24 23:42:00  ...              1
2020-07-24 23:43:00 2020-07-24 23:43:00  ...              1
2020-07-24 23:44:00 2020-07-24 23:44:00  ...              1
2020-07-24 23:45:00 2020-07-24 23:45:00  ...              1
2020-07-24 23:46:00 2020-07-24 23:46:00  ...              1
2020-07-24 23:47:00 2020-07-24 23:47:00  ...              1
2020-07-24 23:48:00 2020-07-24 23:48:00  ...              1
2020-07-24 23:49:00 2020-07-24 23:49:00  ...              1
2020-07-24 23:50:00 2020-07-24 23:50:00  ...              1
2020-07-24 23:51:00 2020-07-24 23:51:00  ...              1
2020-07-24 23:52:00 2020-07-24 23:52:00  ...              1
2020-07-24 23:53:00 2020-07-24 23:53:00  ...              1
2020-07-24 23:54:00 2020-07-24 23:54:00  ...              1
2020-07-24 23:55:00 2020-07-24 23:55:00  ...              1
2020-07-24 23:56:00 2020-07-24 23:56:00  ...              1
2020-07-24 23:57:00 2020-07-24 23:57:00  ...              1
2020-07-24 23:58:00 2020-07-24 23:58:00  ...              1
2020-07-24 23:59:00 2020-07-24 23:59:00  ...              1

[60 rows x 7 columns]

我想在另一个数据框 'dfcont2' 中选择特定行:

dfcont2
                               waddling_count    MP  waddling_frame
Date_and_time                                                      
2020-07-24 23:00:01.065838656           943.0   0.0             0.0
2020-07-24 23:00:01.132505322           943.0   0.0             0.0
2020-07-24 23:00:01.199171988           943.0   0.0             0.0
2020-07-24 23:00:01.265838654           943.0   0.0             0.0
2020-07-24 23:00:01.332505320           943.0   0.0             0.0
                                      ...   ...             ...
2020-07-24 23:59:58.399136016          2160.0   0.0             0.0
2020-07-24 23:59:58.465802682          2160.0   0.0             0.0
2020-07-24 23:59:58.532469348          2160.0   0.0             0.0
2020-07-24 23:59:58.599136014          2160.0   0.0             0.0
2020-07-24 23:59:58.665802680          2160.0  21.0             0.0

[53965 rows x 3 columns]

我想选择 dfcont2 中满足以下条件的那些行:

activity_level2['walking_frame'] = 0

我想要 'activity_level2' 中 2 个特定时间戳之间的所有行(因此需要 1 整分钟) 我希望这很清楚......我不知道如何做到这一点......非常感谢任何帮助。

【问题讨论】:

  • :1: UserWarning: Boolean Series key 将被重新索引以匹配 DataFrame 索引。 *** pandas.core.indexing.IndexingError:作为索引器提供的不可对齐的布尔系列(布尔系列的索引和索引对象的索引不匹配)。
  • 哦...所以你有不同长度的df
  • 是的,activity_level2 有 60 行(60 分钟),dfcont2 有 >50.000 行(每秒 15 帧)
  • 请以 pandas.DataFrame 格式、字典格式或至少不带省略号的形式重新发布您的示例数据。
  • 这能回答你的问题吗? Pandas: select DF rows based on another DF

标签: python pandas


【解决方案1】:

我建议试试这个:

# In case "Date_and_time" column is not already of type 'datetime' in both dfs:
activity_level2["Date_and_time"] = pd.to_datetime(
    activity_level2["Date_and_time"], format="%Y-%m-%d %H:%M:%S"
)
dfcont2["Date_and_time"] = pd.to_datetime(
    dfcont2["Date_and_time"], format="%Y-%m-%d %H:%M:%S"
)

# Rows of activity_level2 for which 'walking_frame' is equal to 0
filtered_activity = activity_level2.loc[activity_level2['walking_frame'] == 0, :]

# Rows of dfcont2 between the 2 specific timestamps in 'filtered_activity'
mask = dfcont2["Date_and_time"].isin(filtered_activity["Date_and_time"].values)
newdf = dfcont2.loc[mask, :]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多