【发布时间】:2023-01-28 11:59:57
【问题描述】:
我有一个数据框,如果 owner_type 相同,我需要删除 ticket_id 的重复项,如果不同,则选择 'm' 而不是 's',如果没有值被选中,则返回 NaN:
data = pd.DataFrame({'owner_type':['m','m','m','s','s','m','s','s'],'ticket_id':[1,1,2,2,3,3,4,4]})
'| | owner_type | ticket_id |
|---:|:-------------|------------:|
| 0 | m | 1 |
| 1 | m | 1 |
| 2 | m | 2 |
| 3 | s | 2 |
| 4 | s | 3 |
| 5 | m | 3 |
| 6 | s | 4 |
| 7 | s | 4 |'
应该回馈:
'| | owner_type | ticket_id |
|---:|:-------------|------------:|
| 0 | m | NaN |
| 1 | m | NaN |
| 2 | m | 2 |
| 3 | s | NaN |
| 4 | s | NaN |
| 5 | m | 3 |
| 6 | s | NaN |
| 7 | s | NaN |'
伪代码如下:如果 ticket_id 重复,则查看 owner_type,如果 owner_type 有一个以上的值,则返回“m”的值和“s”的 NaN。
我的尝试
data.groupby('ticket_id').apply(lambda x: x['owner_type'] if len(x) < 2 else NaN)
不工作
【问题讨论】: