Я думаю, вы можете попробовать код ниже.
testdf = df.groupby('Type',as_index=False).apply(lambda x: x.groupby(pd.cut(x["Vol"],np.arange(x["Volume"].min(),x["Volume"].max(),200)),as_index=False).apply(test))
Здесь происходит следующее: первый groupby
в основном группирует Dataframe в категорию «Тип», а затем вы хотите сгруппировать его по диапазонам. Для этого вы можете снова сгруппировать его, используя лямбда-функцию, используя функцию pd.cut
, чтобы сделать небольшие отрезки интервала в зависимости от вашего диапазона. В этом случае я просто беру максимальное и минимальное значение и обрезаю его с интервалами в 200. После этого, если вы хотите снова объединить выходные данные, образуя Dataframe снова, используйте еще одно приложение для их объединения.
как это,
def test(group):
#Write your function here. Whatever you want to perform.
return group.merge(group)
И я использую as_index=False
, чтобы сбросить индекс здесь, чтобы реструктурировать кадр данных в соответствии с новым индексом.
Надеюсь, это поможет.
Edit: -
Для бункеров вам не нужно беспокоиться, потому что каждый groupby
создает новый индекс, который вы можете использовать для своих целей. Как в,
Index1 Index2 Type Volume
0 0 Cylinder 100
0 0 Cylinder 140
0 1 Cylinder 250
1 0 Oval 154
1 4 Oval 999
2 1 Circle 328