Разверните список из одного кадра данных в другой. - PullRequest
0 голосов
/ 30 июня 2018

Я надеялся получить помощь по следующим вопросам:

У меня есть данный df ниже:

df
fruit   State  Count
apples     CA   45
apples     VT   54
apples     MI   18
pears      TX   20
pears      AZ   89
plums      NV   62
plums      ID   10

Я взял все самые высокие показатели для каждого фрукта в каждом штате и смог получить что-то вроде:

df2
fruit      State   Count
apples     VT      54
pears      AZ      89
plums      NV      62

Теперь я пытаюсь выяснить, как получить значения 'State' из df2 в виде нового столбца в df, чтобы он выглядел примерно так:

df
fruit   State  Count  Main
apples     CA   45    VT
apples     VT   54    VT
apples     MI   18    VT
pears      TX   20    AZ
pears      AZ   89    AZ
plums      NV   62    NV
plums      ID   10    NV

Я могу сделать нечто подобное с функцией .transform (), но я знаю, как это сделать только при вызове функции max. Могу ли я запустить преобразование на df ['list']? Или я что-то здесь упускаю?

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Два шага :-) без groupby

df2=df.sort_values('Count').drop_duplicates('fruit',keep='last')
df['new']=df.fruit.map(df2.set_index('fruit').State)
df
Out[240]: 
    fruit State  Count new
0  apples    CA     45  VT
1  apples    VT     54  VT
2  apples    MI     18  VT
3   pears    TX     20  AZ
4   pears    AZ     89  AZ
5   plums    NV     62  NV
6   plums    ID     10  NV
0 голосов
/ 30 июня 2018

Используйте GroupBy.transform от DataFrameGroupBy.idxmax, но сначала нужно set_index для индексов по столбцу State:

df['new'] = df.set_index('State').groupby('fruit')['Count'].transform('idxmax').values
print (df)
    fruit State  Count new
0  apples    CA     45  VT
1  apples    VT     54  VT
2  apples    MI     18  VT
3   pears    TX     20  AZ
4   pears    AZ     89  AZ
5   plums    NV     62  NV
6   plums    ID     10  NV

Другое решение с sort_values, drop_duplicates и set_index для map этим Series :

s = (df.sort_values('Count', ascending= False)
       .drop_duplicates('fruit')
       .set_index('fruit')['State'])
print (s)
fruit
pears     AZ
plums     NV
apples    VT
Name: State, dtype: object

df['new'] = df['fruit'].map(s)
print (df)
    fruit State  Count new
0  apples    CA     45  VT
1  apples    VT     54  VT
2  apples    MI     18  VT
3   pears    TX     20  AZ
4   pears    AZ     89  AZ
5   plums    NV     62  NV
6   plums    ID     10  NV
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...