列未附加到数据框

时间:2018-11-12 05:13:51

标签: python-3.x pandas

我正在使用以下代码进行分组计算。

**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 :(得分:1)

尝试一下:

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

答案 1 :(得分:1)

根据熊猫文档DataFrame.assign

  

关键字是列名。如果这些值是可调用的,则它们将在DataFrame上计算并分配给新列。 可调用对象不得更改输入DataFrame(尽管pandas不会对其进行检查)。如果值不可调用(例如,Series,标量或数组),则将它们简单分配。

因此,您需要将其分配给原始df或使用显式的常规分配,也不需要replacetransform

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