我有一个这样的数据框架:
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这样的链接,但它们不是动态的(我的意思是这里的行数应该根据一些条件增加)
发布于 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 Number
和Date
排序(如果尚未排序,则可以执行df.sort_values(['Clinic Number', 'date'], inplace=True)
)
https://stackoverflow.com/questions/51467866
复制相似问题