首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较Pandas中列中的两个重复值

比较Pandas中列中的两个重复值
EN

Stack Overflow用户
提问于 2019-03-18 09:33:09
回答 3查看 610关注 0票数 2

我有一个列与客户的名称,这是复制时,客户有2个产品。我必须创建一个新的状态,以分组客户状态在一个取决于情况。因此,我必须将客户X与另一个X进行比较,以生成一个新的状态。

代码语言:javascript
运行
复制
Customer|Status  |Cancaled_at|new status
X       |Active  |-          |
X       |Canceled|2019-xx-xx |
Y       |Active  |-          |
Z       |Active  |-          |
A       |Canceled|-          |

期望输出:

代码语言:javascript
运行
复制
Customer|Status  |Cancaled_at|new status
X       |Active  |-          |Canceled
X       |Canceled|2019-xx-xx |Canceled
Y       |Active  |-          |
Z       |Active  |-          |
A       |Canceled|-          |
EN

回答 3

Stack Overflow用户

发布于 2019-03-18 10:58:13

有一种简单的方法可以在熊猫身上找到所有重复的价值:

代码语言:javascript
运行
复制
df['new_status'][(df.duplicated('Customer', False))] = 'Canceled'

这就使得new_statusCanceled,其中dataframe的Customer列具有重复的值。

票数 1
EN

Stack Overflow用户

发布于 2019-03-18 10:52:49

我觉得你需要:

代码语言:javascript
运行
复制
df = pd.DataFrame({'Customer':['X','X','Y','Z','A'], 'status':['active','canceled','active','active','canceled'],
    'Canceled_at':[None, '2019-01-01', None, None,None]})


df['new_status'] = np.where((df['status']=='canceled') & (~df['Canceled_at'].isnull()), 'canceled', None)
df['new_status'] = df.groupby('Customer')['new_status'].bfill()

print(df)

输出:

代码语言:javascript
运行
复制
 Canceled_at   Customer    status new_status                                                                                           
0        None        X    active   canceled                                                                                           
1  2019-01-01        X  canceled   canceled                                                                                           
2        None        Y    active       None                                                                                           
3        None        Z    active       None                                                                                           
4        None        A  canceled       None
票数 0
EN

Stack Overflow用户

发布于 2019-03-18 10:58:17

此代码使用值()填料()班()

代码语言:javascript
运行
复制
df = df.sort_values(by=['Customer', 'Status'])
df['new_status'] = df[df.Status == 'Canceled']['Status']
df.loc[((df['Customer'] != df['Customer'].shift(-1)) & (df['new_status'].isnull())), 'new_status'] = ''
df['new_status'].fillna(method = 'backfill', limit = 1, inplace = True)
df.sort_index(inplace = True)

产生以下输出:

代码语言:javascript
运行
复制
    Customer    Status      Cancaled_at new_status
0   X           Active      -           Canceled
1   X           Canceled    2019-xx-xx  Canceled
2   Y           Active      -   
3   Z           Active      -   
4   A           Canceled    -           Canceled
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55218249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档