【问题标题】:Compare timestamps from a column and put 1 to another column for the latest timestamp in pandas比较一列中的时间戳并将 1 放入另一列以获得 pandas 中的最新时间戳
【发布时间】:2022-01-15 13:06:37
【问题描述】:

假设我有一个这样的数据框:

     col1              col2
0    data1       2021-03-21 19:58:09
1    data1       2021-03-22 19:58:09
2    data1       2021-03-23 19:58:09
3    data2       2021-03-20 19:58:09
4    data2       2021-03-21 19:58:09
5    data2       2021-03-22 19:58:09
6    data3       2021-03-19 19:58:09
7    data3       2021-03-20 19:58:09
8    data1       2021-03-24 19:58:09

我如何比较 col2 中的所有时间戳与 col1 中的 data1 并创建另一列,其中我将 1 用于最新时间戳,将 0 用于其他时间:

     col1              col2                latest
0    data1       2021-03-21 19:58:09          0
1    data1       2021-03-22 19:58:09          0
2    data1       2021-03-23 19:58:09          0
3    data2       2021-03-20 19:58:09          0
4    data2       2021-03-21 19:58:09          0
5    data2       2021-03-22 19:58:09          1
6    data3       2021-03-19 19:58:09          0
7    data3       2021-03-20 19:58:09          1
8    data1       2021-03-24 19:58:09          1

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    执行groupbytransform,并将值与最大值进行比较:

    df['col2'] = pd.to_datetime(df['col2'])
    latest = df.col2 == df.groupby('col1', sort = False).col2.transform('max')
    df.assign(latest = latest.astype(int))
     
        col1                col2  latest
    0  data1 2021-03-21 19:58:09       0
    1  data1 2021-03-22 19:58:09       0
    2  data1 2021-03-23 19:58:09       0
    3  data2 2021-03-20 19:58:09       0
    4  data2 2021-03-21 19:58:09       0
    5  data2 2021-03-22 19:58:09       1
    6  data3 2021-03-19 19:58:09       0
    7  data3 2021-03-20 19:58:09       1
    8  data1 2021-03-24 19:58:09       1
    

    【讨论】:

      【解决方案2】:

      这应该可以工作

      data.loc[data.groupby("col1")["col2"].tail(1).index, "latest"] = 1
      data.fillna(0, inplace = True)
      

      或者在一行中,受到另一个答案的启发。

      df.assign(latest=lambda d: (d["col2"] == d.groupby('col1')["col2"].transform('max')).astype(int))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-28
        • 2020-10-29
        • 2014-02-07
        • 2021-07-05
        • 2016-02-11
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多