【问题标题】:Python Pandas: add column in a dataframe based on a matching valuesPython Pandas:根据匹配值在数据框中添加列
【发布时间】:2021-07-22 16:16:37
【问题描述】:

我有两个数据框。一个有每日数据,另一个有每小时数据。两个数据框都涵盖了确切的时间段(大约 2 年)

数据框 1 如下所示:

0   2017-01-01  963.658020  998.325012  0.035974    False   False
1   2017-01-02  998.617004  1021.750000     0.023165    False   False
2   2017-01-03  1021.599976     1043.839966     0.021770    False   False
3   2017-01-04  1044.400024     1154.729980     0.105640    True    False
4   2017-01-05  1156.729980     1013.380005     -0.123927   False   True

数据框 2 如下所示:

0   2017-01-01  00:00:00    974.55  972.00  -0.002617
1   2017-01-01  01:00:00    972.00  970.55  -0.001492
2   2017-01-01  02:00:00    970.55  969.89  -0.000680
3   2017-01-01  03:00:00    969.89  967.80  -0.002155
4   2017-01-01  04:00:00    967.80  967.80  0.000000

我想将最后两个布尔列添加到我的每小时数据框中。如果数据框 1 中的给定日期有一个布尔值 false,我希望将该值添加到数据框 2 中与该日期对应的所有行中。 我不知道合并是否可以在这里工作,因为数据框 2 没有任何唯一值。

【问题讨论】:

    标签: python pandas dataframe date merge


    【解决方案1】:

    假设您的两个数据框的第一列是datedatetimedf1 中的布尔列是 boolean1boolean2

    首先将您的第一列转换为日期时间类型

    df1['date'] = pd.to_datetime(df1['date'])
    df2['datetime'] = pd.to_datetime(df2['datetime'])
    

    然后根据df1date列创建df2布尔列

    df2['boolean1'] = df2['datetime'].dt.date.map(df1.set_index('date')['boolean1'])
    df2['boolean2'] = df2['datetime'].dt.date.map(df1.set_index('date')['boolean2'])
    

    最后,过滤掉df2 中两个布尔列都为真的行

    m = df2[['boolean1', 'boolean2']].all(axis=1)
    df2 = df2[~m]
    

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      相关资源
      最近更新 更多