Значения группового индекса на основе других значений индекса в панде Data Frame - PullRequest
1 голос
/ 08 октября 2019

У меня есть фрейм данных со следующей структурой


                     Sentence                 Label

A              B   
"unique ID1"   0    "Sample sentence 1"        jt
"unique ID1"   1   "Sample sentence 2"        jt  
"unique ID3"   2   "Sample sentence 3"        edu
"unique ID3"   3   "Sample sentence 4"        edu

Я хочу иметь возможность получить все значения индекса B, сгруппированные по значению индекса A, где label == jt, и повторить это длявсе уникальные значения меток. Предпочтительный тип возврата - key-value пар, но любой другой подходящий формат также будет работать.

Допустимый пример для метки == jt:

("unique ID1" : [0,1] )

Допустимый пример дляlabel == edu:

("unique ID3" : [2,3] )

Я уже пробовал много SO вопросов, но не нашел именно то, что ищу.

Я такжепопробовал это:



sorted_index_df = df.sort_index(inplace = False)

multi_index = sorted_index_df.loc[sorted_index_df["label"] == "jt"].index

Выполнение этого вернуло бы каждое значение индекса A с соответствующим значением индекса B в виде отдельного кортежа.

Пример: ('Labor_&_Delivery_Nurse-APRN__Lidia_Lambert__', 17)

Но я хочу иметь возможность группировать все значения индекса B по значениям из индекса A.

Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 08 октября 2019

Попробуйте:

Чтобы получить 'jt' только

df[df.Label.eq('jt')].reset_index(level=1).groupby(level=0).B.unique()

Out[22]:
A
unique ID1    [0, 1]
Name: B, dtype: object

Чтобы получить 'edu' только

df[df.Label.eq('edu')].reset_index(level=1).groupby(level=0).B.unique()

Out[23]:
A
unique ID3    [2, 3]
Name: B, dtype: object
1 голос
/ 08 октября 2019

Чтобы обеспечить лучшее представление, я немного расширил ваш пример данных:

                Sentence Label
A   B                         
ID1 0  Sample sentence 1    jt
    1  Sample sentence 2    jt
ID3 2  Sample sentence 3   edu
    3  Sample sentence 4   edu
ID4 4  Sample sentence 5    jt
    5  Sample sentence 6    jt
ID5 6  Sample sentence 7   edu
    7  Sample sentence 8   edu

Цель состояла в том, чтобы иметь как минимум 2 разных ID s для каждой метки .

Чтобы вычислить результат для всех Метка s и ID s, достаточно выполнить одну инструкцию:

df.reset_index().groupby(['Label', 'A']).B.apply(list)

Длямои данные, результат:

Label  A  
edu    ID3    [2, 3]
       ID5    [6, 7]
jt     ID1    [0, 1]
       ID4    [4, 5]
1 голос
/ 08 октября 2019

Вы можете достичь этого с помощью группового режима, как показано ниже

df = pd.DataFrame([['unique ID1', '0', 'Sample sentence 1', 'jt'], ['unique ID1', '1', 'Sample sentence 2', 'jt'], ['unique ID3', '2', 'Sample sentence 3', 'edu'], ['unique ID3', '3', 'Sample sentence 4', 'edu']], columns=('A', 'B', 'Sentence', 'Label'))
result = df.groupby(["A", "Label"]).agg({"B":list}).reset_index(level=0)

## you can get result for jt like

result.loc["jt"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...