Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据pandas中的某些条件创建行号_Python_Pandas_Dataframe_Group By - Fatal编程技术网

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)
如果尚未排序)

您知道这个问题吗?事实上,我要做的事情效率不高。如果你有时间的话,我会很感激你的