是否可以将python中的groupby应用于已分组的对象?

是否可以将python中的groupby应用于已分组的对象?,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,我有一个如下所示的数据集: File_no A B Date Batch State 0 1 2 3 23-1-2019 2 3 1 2 7 6 23-1-2019 2 4 2 3 9 2 24-1-2019 1 2 3 5 6 3 24-1-2019 2 3 4

我有一个如下所示的数据集:

  File_no    A   B       Date     Batch  State   

0    1       2    3    23-1-2019    2      3
1    2       7    6    23-1-2019    2      4
2    3       9    2    24-1-2019    1      2
3    5       6    3    24-1-2019    2      3
4    6       4    3    24-1-2019    1      4
5    8       2    3    25-1-2019    1      4
我想根据日期和批次对数据列“A”和“B”进行分组。然后根据文件编号的顺序对这些列的行进行移位。例如,在上面的dataframe文件中,4号文件丢失

我能够实现移位功能,但我不能为每个小组单独完成

例如:6和8个文件不按顺序排列,但它们来自不同的日期。因此,不应执行移位,因为它缺少一个序列

diff = data['File_no'].diff().ne(1).cumsum() 

grouped=data.groupby(['Date','Batch'])

grouped.apply(lambda data: data.groupby(diff)['A','B'].shift())

当存在缺失序列且不考虑组时,这会发生移位。

预期产出:



  File_no    A   B       Date     Batch  State   

0    1       Nan  Nan    23-1-2019    2      3
1    2       2    3      23-1-2019    2      4
2    3       9    2      24-1-2019    1      2
3    5       Nan  Nan    24-1-2019    2      3
4    6       6    3      24-1-2019    1      4
5    8       2    3      25-1-2019    1      4


我认为您可以将带有序列的列传递给一个
groupby

diff = data['File_no'].diff().ne(1).cumsum() 
data[['A','B']] = data.groupby(['Date','Batch',diff])['A','B'].shift()
print (data)

   File_no    A    B       Date  Batch  State
0        1  NaN  NaN  23-1-2019      2      3
1        2  2.0  3.0  23-1-2019      2      4
2        3  NaN  NaN  24-1-2019      1      2
3        5  NaN  NaN  24-1-2019      2      3
4        6  NaN  NaN  24-1-2019      1      4
4        8  NaN  NaN  25-1-2019      1      4
编辑:


我认为您可以将带有序列的列传递给一个
groupby

diff = data['File_no'].diff().ne(1).cumsum() 
data[['A','B']] = data.groupby(['Date','Batch',diff])['A','B'].shift()
print (data)

   File_no    A    B       Date  Batch  State
0        1  NaN  NaN  23-1-2019      2      3
1        2  2.0  3.0  23-1-2019      2      4
2        3  NaN  NaN  24-1-2019      1      2
3        5  NaN  NaN  24-1-2019      2      3
4        6  NaN  NaN  24-1-2019      1      4
4        8  NaN  NaN  25-1-2019      1      4
编辑:


预期输出是否正确?因为如果在data.groupby(['Date','Batch']):print(df)获取不同的组中使用i,df的
。是否可以使用
diff=data['File_no'].diff().ne(1).cumsum()df=data.groupby(['Date','Batch',diff])['A','B'].shift()
?如果不是,原因是什么?嗨,是的,预期输出是正确的。是的,我可以使用你建议的代码。。。我想这应该会给我带来输出。我将验证输出..好的,因为它与所讨论的不同,因为不同的组。预期的输出正确吗?因为如果在data.groupby(['Date','Batch']):print(df)
获取不同的组中使用i,df的
。是否可以使用
diff=data['File_no'].diff().ne(1).cumsum()df=data.groupby(['Date','Batch',diff])['A','B'].shift()
?如果不是,原因是什么?嗨,是的,预期输出是正确的。是的,我可以使用你建议的代码。。。我想这应该会给我带来输出。我将验证输出..好的,因为它是不同的输出,就像所讨论的,因为不同的组。是的..只是输出中的一个小变化,我将文件5的值移到了文件6。因此,文件6不是'NaN'@hakuna_code-我不确定是否理解,你能解释更多吗?因此,如果你看到文件5,它会变成NaN,因为它缺少的序列是abive(文件4缺少)。但是,文件5将按照顺序将其“A”和“B”列值移动到文件6。当我运行文件时,6号文件没有A和B的NaNprogram@hakuna_code-文件\u no
中的值是唯一的和数字吗?是的。只是输出中的一个小变化,我将文件5的值移到了文件6。因此,文件6不是'NaN'@hakuna_code-我不确定是否理解,你能解释更多吗?因此,如果你看到文件5,它会变成NaN,因为它缺少的序列是abive(文件4缺少)。但是,文件5将按照顺序将其“A”和“B”列值移动到文件6。当我运行文件时,6号文件没有A和B的NaNprogram@hakuna_code-文件_no中的值是否唯一和唯一?