首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据pandas中的一些条件创建row_number

如何根据pandas中的一些条件创建row_number
EN

Stack Overflow用户
提问于 2018-07-23 01:59:08
回答 1查看 841关注 0票数 1

我有一个这样的数据框架:

   Clinic Number        date
0              1  2015-05-05
1              1  2015-05-05
2              1  2016-01-01
3              2  2015-05-05
4              2  2016-05-05
5              3  2017-05-05
6              3  2017-05-05

我想创建一个新列,并根据一些条件填充它。所以新的数据框应该是这样的:

   Clinic Number    date      row_number
0              1  2015-05-05    1
1              1  2015-05-05    1
2              1  2016-01-01    2
3              2  2015-05-05    3
4              2  2016-05-05    4
5              3  2017-05-05    5
6              3  2017-05-05    5

将条目放入新列的规则是什么:当诊所编号和日期相同时,它们将获得相同的数字,如果更改,则将增加。

例如,这里的1 2015-05-05有两行,它们具有相同的Clinic Number and date,因此它们都得到1。下一行是Clinic Number=1,但日期与前一行不同,因此它将得到2。其中Clinic Number=2没有与Clinic Number=2相同的行,所以它得到了3,下一行是4...

到目前为止,我已经尝试了这样的东西:

def createnumber(x):
    x['row_number'] = i

d['row_number']= pd1.groupby(['Clinic Number','date']).apply(createnumber)

但是我不知道如何实现这个功能。

如果你能帮助我,我将不胜感激:)我也看过像this这样的链接,但它们不是动态的(我的意思是这里的行数应该根据一些条件增加)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-23 02:05:51

您可以这样做,而不是groupby,将您的条件单独命名。因此,如果日期改变或诊所编号更改,则返回True,然后获取这些True值的cumsum

df['row_number'] = (df.date.ne(df.date.shift()) | df['Clinic Number'].ne(df['Clinic Number'].shift())).cumsum()


>>> df
   Clinic Number        date  row_number
0              1  2015-05-05           1
1              1  2015-05-05           1
2              1  2016-01-01           2
3              2  2015-05-05           3
4              2  2016-05-05           4
5              3  2017-05-05           5

您需要确保您的数据帧首先按Clinic NumberDate排序(如果尚未排序,则可以执行df.sort_values(['Clinic Number', 'date'], inplace=True) )

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51467866

复制
相关文章

相似问题

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