Python 如何根据pandas中的某些条件创建行号
我有这样一个数据框:Python 如何根据pandas中的某些条件创建行号,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,我有这样一个数据框: 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 Cli
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
def createnumber(x):
x['row_number'] = i
d['row_number']= pd1.groupby(['Clinic Number','date']).apply(createnumber)
我想创建一个新列,并根据一些条件进行填写。因此,新的数据框应如下所示:
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
def createnumber(x):
x['row_number'] = i
d['row_number']= pd1.groupby(['Clinic Number','date']).apply(createnumber)
将条目放入新列的规则是什么:
如果诊所编号和日期相同,他们将得到相同的编号,如果更改,则会增加
例如,这里的1 2015-05-05
有两行,它们具有相同的诊所编号和日期
,因此它们都得到1
。下一行的Clinic Number=1,但日期与前几行不同,因此将得到2
。
其中,Clinic Number=2
没有诊所编号为2且日期相同的行,因此它得到了3
,下一行是4
到目前为止,我已经尝试过这样的方法:
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
def createnumber(x):
x['row_number'] = i
d['row_number']= pd1.groupby(['Clinic Number','date']).apply(createnumber)
但我不知道如何实现这个功能
如果您能帮助我,我将不胜感激:)
我也看到了这样的链接,但它们不是动态的(我的意思是这里的行号应该根据某些条件增加)而不是
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
您需要首先确保您的数据框按
诊所编号
和日期
排序(您可以对数值进行df.sort_排序(['Clinic Number','Date'],inplace=True)
如果尚未排序)您知道这个问题吗?事实上,我要做的事情效率不高。如果你有时间的话,我会很感激你的