2016-08-22 2 views
2

Учитывая следующий пример набора данных:Data ID, создайте значение: подсчитывать в колонке

import numpy as np 
import pandas as pd 
df1 = (pd.DataFrame(np.random.randint(3, size=(5, 4)), columns=('ID', 'X1', 'X2', 'X3'))) 
print(df1) 

    ID X1 X2 X3 
0 2 2 0 2 
1 1 0 2 1 
2 1 2 1 1 
3 1 2 0 2 
4 2 0 0 0 

d = {'ID' : pd.Series([1, 2, 1, 4, 5]), 'Tag' : pd.Series(['One', 'Two', 'Two', 'Four', 'Five'])} 
df2 = (pd.DataFrame(d)) 
print(df2) 

    ID Tag 
0 1 One 
1 2 Two 
2 1 Two 
3 4 Four 
4 5 Five 

df1['Merged_Tags'] = df1.ID.map(df2.groupby('ID').Tag.apply(list)) 
print(df1) 

    ID X1 X2 X3 Merged_Tags 
0 2 2 0 2  [Two] 
1 1 0 2 1 [One, Two] 
2 1 2 1 1 [One, Two] 
3 1 2 0 2 [One, Two] 
4 2 0 0 0  [Two] 

Ожидаемый результат для ID = 1:

1.

Как бы один GroupBy каждый ключ и сгенерировать формат Tag: Frequency в столбце Merged_Tags?

ID X1 X2 X3  Merged_Tags 
1 1 0 2 1 [One: 3, Two: 3] 

2.

Создать новый столбец для числа строк с этой ID

ID X1 X2 X3  Merged_Tags Frequency 
1 1 0 2 1 [One: 3, Two: 3]  3 

3.

Добавьте значения столбца X3 в каждом строка с тем же ID

ID X1 X2 X3  Merged_Tags Frequency X3++ 
1 1 0 2 1 [One: 3, Two: 3]  3  4 
+0

обновила данные – user3939059

+0

существуют различные метки для тот же идентификатор, но они объединены в столбец «Merged_Tags». Это проблема? – user3939059

+0

извините, я не нашел ничего элегантного решения – MaxU

ответ

0

1 0 2 1 [One: 3, Two: 3] 

должен быть [One: 2, два: 3] вместо выпрямить? Учитывая это:

1 : [One,Two] 
    0 : None 
    2 : [Two] 
    1 : [One, Two] 

и вы хотите, чтобы суммарный счетчик каждой клавиши в строке?

Пожалуйста, помогите мне понять интуицию за [One: 3, два: 3] в случае, если я ничего здесь отсутствует, но ваш вопрос должен быть легко решить иначе

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