我的数据帧(为了说明起见,对其进行了简化(的形式为:
| id | duplicate_id | Country | action_code | keep
|------|--------------|---------|-------------|-----
| 1 | | Norway | 1.1 | y
| 2 | | Norway | 1.1 | y
| 3 | | Norway | 1.2 | y
| 4 | | Iceland | 2.0 | y
| 5 | | Iceland | 2.0 | y
| 6 | | Iceland | 2.0 | y
我不想删除重复的行,而是想几乎保留原始数据帧,而是用与唯一行的id(即第一列的id(相同的条目填充非唯一行的列"重复id"。此外,对于那些非唯一的行,列"action_code"将更改为"12","keep"将改为"n"。最后的表格预计为:
| id | duplicate_id | Country | action_code | keep
|------|--------------|---------|-------------|-----
| 1 | | Norway | 1.1 | y
| 2 | 1 | Norway | 12 | n
| 3 | | Norway | 1.2 | y
| 4 | | Iceland | 2.0 | y
| 5 | 4 | Iceland | 12 | n
| 6 | 4 | Iceland | 12 | n
这可以使用numpy中的"where"方法来完成吗?或者有更直接的方法吗?
一个带有自定义汇总功能的groupby可以很好地完成任务:
def summarize(group):
# Everything inside the `group` dataframe is
# a duplicate of its first row
cond = group.index != group.index[0]
group.loc[cond, 'duplicate_id'] = group.iloc[0]['id']
group.loc[cond, 'action_code'] = '12'
group.loc[cond, 'keep'] = 'n'
return group
df.groupby(['Country', 'action_code']).apply(summarize)