熊猫:保留列,计数,删除重复项

时间:2019-03-06 16:20:06

标签: python pandas

我目前正在尝试根据两列删除重复项,但是在删除重复项之前先对其进行计数。我已经通过

做到了

dependencies { classpath 'com.android.tools.build:gradle:3.3.2' }

但这让我留下

classpath 'com.android.tools.build:gradle:3.4.1'

它做了我想要的关于计数,添加为列和删除重复项的操作,但是在保留原始结构(再加上一个新列)的情况下,我将如何做到这一点。向classpath 'com.android.tools.build:gradle:3.3.2'添加更多内容会更改其行为。

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

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 字段,以包含该组合的第一个出现的时间戳。

1 个答案:

答案 0 :(得分:2)

您想像下面那样使用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]