2015-08-07 3 views
0

Этот питон DataFrame:Python Панды GroupBy назначение объекта dtypes

df = pd.DataFrame({'ID': [3553102778, 3553102958, 3553103948, 3553103948, 3553104038, 3553104038, 3553104128, 3553104218, 3557580098], 'Based on': ['CTR', 'CTR', 'Conv rate', 'CTR', 'Conv rate', 'CTR', 'CTR', 'CTR', 'CTR']}, columns=['ID', 'Based on']) 

Производит DataFrame, который выглядит следующим образом:

  ID Based on 
0 3553102778  CTR 
1 3553102958  CTR 
2 3553103948 Conv rate 
3 3553103948  CTR 
4 3553104038 Conv rate 
5 3553104038  CTR 
6 3553104128  CTR 
7 3553104218  CTR 
8 3557580098  CTR 

Обратите внимание, как ID3553103948 и 3553104038 оба Conv rate и CTR?

Как сгруппировать это по ID, но также присвойте Based on значение Conv rate, CTR, чтобы получить это?

  ID  Based on 
0 3553102778    CTR 
1 3553102958    CTR 
2 3553103948 Conv rate, CTR 
4 3553104038 Conv rate, CTR 
6 3553104128    CTR 
7 3553104218    CTR 
8 3557580098    CTR 

Я думаю, что это какой-то groupby и назначение один вкладыш, но я не знаю, как определить, если другие ID s существуют вне строки, равны текущей строки ID.

Возможно, groupby в сочетании с apply? Я еще не знаком с apply.

ответ

0

вы можете использовать apply на группах, что позволяет вам преобразовать группу. Это означает, что функция внутри возвращает что-то для каждого набора записей, имеющих один и тот же идентификатор.

group apply

g = df.groupby("ID") s = g["Based on"].apply(lambda group: group.values) s.to_frame()

s серия, и вы можете преобразовать в dataframe

+0

Это здорово. Спасибо за совет! – Jarad

Смежные вопросы