Панды групповой и qcut
Есть ли способ структурировать команды Pandas groupby и qcut для возврата одного столбца с вложенными плитками? В частности, предположим, что у меня есть 2 группы данных, и я хочу применить qcut к каждой группе, а затем вернуть результат в один столбец. Это было бы похоже на команду ntile () MS SQL Server, которая разрешает Partition by().
A B C
0 foo 0.1 1
1 foo 0.5 2
2 foo 1.0 3
3 bar 0.1 1
4 bar 0.5 2
5 bar 1.0 3
В приведенном выше кадре данных я хотел бы применить функцию qcut к B при разбиении на A для возврата C.
1 ответ
Решение
import pandas as pd
df = pd.DataFrame({'A':'foo foo foo bar bar bar'.split(),
'B':[0.1, 0.5, 1.0]*2})
df['C'] = df.groupby(['A'])['B'].transform(
lambda x: pd.qcut(x, 3, labels=range(1,4)))
print(df)
доходность
A B C
0 foo 0.1 1
1 foo 0.5 2
2 foo 1.0 3
3 bar 0.1 1
4 bar 0.5 2
5 bar 1.0 3