【问题标题】:Drop all rows of a dataframe based on another dataframe删除基于另一个数据框的数据框的所有行
【发布时间】:2022-11-15 20:50:31
【问题描述】:

我有两个数据框,df_1df_2。他们都有datetimeindex,从2022-01-01开始,一直到2022-08-14。第一个 df_1 每小时测量一次,第二个 df_2 每天测量一次。

df_1 = pd.DataFrame(np.random.rand(5424, 1),
                    columns=["Random"],
                    index=pd.date_range(start="20220101000000", end="20220814230000", freq='H'))
df_2 = pd.DataFrame(np.random.randint(0, 3, size=226),
                    columns=["Random"],
                    index=pd.date_range(start="20220101", end="20220814", freq='D'))

我怎么能从df_1 中删除所有行,而df_2 的同一天的测量值不同于零?例如,在这些图片中,我们可以看到 1 月的前两天有 6 和 7 作为测量值,所以我需要将那些日子的所有 48 小时都放在df_1 中。

【问题讨论】:

  • @jezrael 抱歉,我已经编辑了一些代码来生成随机数据。

标签: pandas dataframe


【解决方案1】:

merge_asof 与另一个 DataFrame 的过滤行一起使用:

np.random.seed(123)
df_1 = pd.DataFrame(np.random.rand(5424, 1),
                    columns=["Random"],
                    index=pd.date_range(start="20220101000000", 
                                        end="20220814230000", freq='H'))
df_2 = pd.DataFrame(np.random.randint(0, 3, size=226),
                    columns=["Random"],
                    index=pd.date_range(start="20220101", end="20220814", freq='D'))



df = pd.merge_asof(df_1, df_2, left_index=True, right_index=True)
df = df[df['Random_y'].ne(0)]
print (df)
                     Random_x  Random_y
2022-01-01 00:00:00  0.696469         1
2022-01-01 01:00:00  0.286139         1
2022-01-01 02:00:00  0.226851         1
2022-01-01 03:00:00  0.551315         1
2022-01-01 04:00:00  0.719469         1
                      ...       ...
2022-08-14 19:00:00  0.461419         2
2022-08-14 20:00:00  0.181182         2
2022-08-14 21:00:00  0.676527         2
2022-08-14 22:00:00  0.213839         2
2022-08-14 23:00:00  0.049919         2

[3696 rows x 2 columns]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多