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

标签 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    6       4    3    24-1-2019    1      4
5    8       2    3    25-1-2019    1      4

我想根据日期和批处理对数据列“A”和“B”进行分组。然后根据文件编号的顺序对这些列的行进行移位。例如,在上面的数据框中,文件 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

编辑:

r = np.arange(data['File_no'].min(), data['File_no'].max() + 1)
data = data.set_index('File_no').reindex(r)

diff = data.index.to_series().diff().ne(1).cumsum() 
data[['A','B']] = data.groupby(['Date','Batch',diff])['A','B'].shift()
data = data.dropna(how='all').reset_index()
print (data)
   File_no    A    B       Date  Batch  State
0        1  NaN  NaN  23-1-2019    2.0    3.0
1        2  2.0  3.0  23-1-2019    2.0    4.0
2        3  NaN  NaN  24-1-2019    1.0    2.0
3        5  NaN  NaN  24-1-2019    2.0    3.0
4        6  9.0  2.0  24-1-2019    1.0    4.0
5        8  NaN  NaN  25-1-2019    1.0    4.0

关于python - 是否可以将 python pandas 中的 groupby 应用于已经分组的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56058506/

相关文章:

python - 在 python、go 或 julia 中快速直接访问像素

python - groupby 的 last 在 pandas 中的性能问题

python - Pandas,返回df,其中某一列的值为空

pandas - 将索引的 pandas 矩阵转换为平面数据框

python - 将 datetimeindex 转换为 Qx-YY 格式

DataFrame groupby().apply() 函数似乎被调用了两次

python - 远程运行 TensorFlow

python - Django 模板中的时区感知日期时间对象

python - AttributeError at/admin/'WSGIRequest' 对象没有属性 'user'

python - 具有 bool 值和整数的数据框的 Pandas 条件子集