Pandas中的Groupby ID,并在另一列中获取最新日期和值大于0的行

2024-09-30 06:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

input.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

有人能帮我吗?提前谢谢


Tags: 文件csvtopath代码用户iddf
1条回答
网友
1楼 · 发布于 2024-09-30 06:25:03

首先删除0by ^{}对于不包含0的筛选器行,删除0by ^{}对于不相等的筛选器行,然后使用^{}按两列排序,最后删除重复的id列,使用^{}保留最后一行:

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

相关问题 更多 >

    热门问题