是否可以将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中的值是否唯一和唯一?