【问题标题】:Groupby ID in Pandas and get rows with latest date and value in another column greater than 0Pandas中的Groupby ID并获取另一列中最新日期和值大于0的行
【发布时间】:2020-03-31 08:55:47
【问题描述】:

我有一个 csv 文件,我需要在其中找到最新用户活动不等于 0 的 ID。

输入.csv:

 id  date             userActivity 
 1    2020-03-30            0
 2    2020-03-30            1
 3    2020-03-30            0
 1    2020-03-29            10
 2    2020-03-29            33
 3    2020-03-29            0
 1    2020-03-28            2
 2    2020-03-28            0
 3    2020-03-28            9

所需的输出.csv

 id     date             userActivity 
 1    2020-03-29            10
 2    2020-03-30            1
 3    2020-03-28            9

到目前为止我的代码:

 df = pd.read_csv('path/to/my/input.csv')


activUsr = df.groupby('id').userActivity

df[df['id'].isin(activUsr[activUsr != 0].index)].to_csv('path/to/my/output.csv')

但是,它会抛出以下错误消息:

Exception: Column(s) userActivity already selected

有人可以帮我解决这个问题吗?提前致谢!

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    首先删除0 by boolean indexing 过滤没有0 by Series.ne 的行不相等,然后用DataFrame.sort_values 对两列进行排序,最后删除由id 重复的列并保留最后一行DataFrame.drop_duplicates:

    df['date'] = pd.to_datetime(df['date'])
    df1 = (df[df['userActivity'].ne(0)]
             .sort_values(['id','date'])
             .drop_duplicates('id', keep='last'))
    print (df1)
       id       date  userActivity
    3   1 2020-03-29            10
    1   2 2020-03-30             1
    8   3 2020-03-28             9
    

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 1970-01-01
      • 2014-09-21
      • 2021-01-18
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      相关资源
      最近更新 更多