如何根据Pandas的某些条件创建行数

2024-10-02 18:15:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

   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

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

^{pr2}$

将条目放入新列的规则是什么: 如果诊所的号码和日期相同,他们将得到相同的号码,如果它改变,它将增加。在

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

到目前为止,我尝试过这样的方法:

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

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

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

如果您能帮助我,我将不胜感激:) 另外,我还研究了像this这样的链接,但它们不是动态的(我的意思是在这里,行号应该根据某些条件增加)


Tags: and数据方法numberdate规则def条目
1条回答
网友
1楼 · 发布于 2024-10-02 18:15:29

不用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)排序)

相关问题 更多 >