столбец не привязывается к фрейму данных - PullRequest
0 голосов
/ 12 ноября 2018

Я использую приведенный ниже код для групповой калькуляции.

**Input**
ORG DSTN    FLAG
LON SIN      Y
ADL SIN      N
SIN LON      N
LON SIN      Y
LON SIN      N
ADL SIN      Y
ADL SIN      N
SIN LON      Y
SIN LON      Y
SIN LON      Y
SIN LON      N
LON SIN      N

Мой код

data.assign(Lane_Score=data.groupby(['ORIGIN_CITY','DEST_CITY']).Delay_Flag.apply(lambda x:x.replace('YES|NO',(x=='YES').mean(),regex=True)))

Я получаю вывод, потому что он не привязан к фрейму данных. Когда я пытаюсь извлечь этот столбец, он не работает.

data['Lane_Score']

Как это исправить.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Согласно документации для панд DataFrame.assign

ключевые слова - это имена столбцов. Если значения могут быть вызваны, они вычисляются в DataFrame и присваиваются новым столбцам. Вызываемый объект не должен изменять входной DataFrame (хотя pandas не проверяет его). Если значения не могут быть вызваны (например, ряд, скаляр или массив), они просто присваиваются.

Так что вам нужно либо присвоить его исходному df, либо использовать явное общее назначение. Также вам не нужно replace использовать transform:

df['Lane_Score'] = df.groupby(['ORG','DSTN']).FLAG.transform(lambda x: (x=='Y').mean())

Или более быстрый подход:

df['Lane_Score'] = df['FLAG']=='Y'
df['Lane_Score'] = df.groupby(['ORG','DSTN']).Lane_Score.transform('mean')

Или:

df = df.assign(Lane_Score=df.groupby(['ORG','DSTN']).FLAG.apply(lambda x: x.replace('Y|N',(x=='Y').mean(),regex=True)))

print(df)
    ORG DSTN FLAG  Lane_Score
0   LON  SIN    Y    0.500000
1   ADL  SIN    N    0.333333
2   SIN  LON    N    0.600000
3   LON  SIN    Y    0.500000
4   LON  SIN    N    0.500000
5   ADL  SIN    Y    0.333333
6   ADL  SIN    N    0.333333
7   SIN  LON    Y    0.600000
8   SIN  LON    Y    0.600000
9   SIN  LON    Y    0.600000
10  SIN  LON    N    0.600000
11  LON  SIN    N    0.500000
0 голосов
/ 12 ноября 2018

Попробуйте это:

data['Lane_Score'] = data.groupby(['ORIGIN_CITY','DEST_CITY']).Delay_Flag.apply(lambda x:x.replace('YES|NO',(x=='YES').mean(),regex=True)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...