我目前正在尝试根据两列删除重复项,但是在删除重复项之前先对其进行计数。我已经通过
做到了 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
字段,以包含该组合的第一个出现的时间戳。
答案 0 :(得分:2)
您想像下面那样使用transform
来保持原始数据的形状。
要获取所有item_stamps值的列表,可以将groupby
与agg(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]