繁体   English   中英

Pandas:保留列、计数、删除重复项

[英]Pandas: Keep Column, Count, Drop Duplicates

我目前正在尝试根据两列删除重复项,但在删除之前计算重复项。 我已经设法做到这一点

df_interactions = df_interactions.groupby(['user_id','item_tag_ids']).size().reset_index() \\ .rename(columns={0:'interactions'})

但这给我留下了

   user_id  item_tag_ids  interactions
0      170            71             1
1      170           325             1
2      170           387             1
3      170           474             1
4      170           526             2

它在计数、添加为列和删除重复项方面执行我想要的操作,但是我将如何在保留原始结构(加上一个新列)的情况下执行此操作。 groupby添加更多内容会改变其行为。

这是原始结构,我只想按 ID 分组:

   user_id  item_tag_ids  item_timestamp
0   406225          7271      1483229353
1   406225          1183      1483229350
2   406225          5930      1483229350
3   406225          7162      1483229350
4   406225          7271      1483229350

我希望在较小的数据框中使用新的item_timestamp字段来包含该组合的第一个出现的时间戳。

您想使用如下transform来保持原始数据的形状。

要获取所有 item_stamps 的值列表,您可以将groupbyagg(list)结合使用

# First we create count column with transform
df['count'] = df.groupby(['user_id', 'item_tag_ids']).user_id.transform('size')

# AFter that we merge our groupby with apply list back to our original dataframe
df = df.merge(df.groupby(['user_id', 'item_tag_ids']).item_timestamp.agg(list).reset_index(), 
              on=['user_id', 'item_tag_ids'], 
              how='left',
                  suffixes=['_1', '']).drop('item_timestamp_1', axis=1)

print(df)
   user_id  item_tag_ids  count            item_timestamp
0   406225          7271      2  [1483229353, 1483229350]
1   406225          1183      1              [1483229350]
2   406225          5930      1              [1483229350]
3   406225          7162      1              [1483229350]
4   406225          7271      2  [1483229353, 1483229350]

.agg(list)解释它将组的值聚合到一个列表中,如下所示:

df.groupby(['user_id', 'item_tag_ids']).item_timestamp.agg(list).reset_index()
Out[39]: 
   user_id  item_tag_ids            item_timestamp
0   406225          1183              [1483229350]
1   406225          5930              [1483229350]
2   406225          7162              [1483229350]
3   406225          7271  [1483229353, 1483229350]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM