为了账号安全,请及时绑定邮箱和手机立即绑定

添加基于其他列和行的新列

添加基于其他列和行的新列

30秒到达战场 2023-06-20 13:39:14
我有一个大数据框。让我写一个示例数据框,让您理解我的问题。A      B      C     car    red    15car    blue   20car    grey   14bike   red    6bike   blue   8phone  red    9phone  blue   11phone  grey   10假设 C 列显示价格。我想添加一个名为“D”的列。此列将回答“读取的汽车是否比所有汽车的平均价格贵?”。以及其他 A 值的相同问题。我的问题基本上就是这样。我想看到这个:A      B      C    D    car    red    15   cheapcar    blue   20   expensivecar    grey   14   cheapbike   red    6    cheapbike   blue   8    expensivephone  red    9    cheapphone  blue   11   expensivephone  grey   10   cheap我写了太多方法来完成这个任务。最后我认为这段代码可以解决我的问题,但事实并非如此。我用 While 循环尝试了同样的事情,但我一直收到 Key Error 0。我该怎么办?这是我试过的代码:df["D"] = "cheap"A.values = df.A.unique()for b in A.values:    for i in range(len(df.loc[data.A== b])):        if df.loc[df.A== b, "C"][i] >= df.loc[df.A== b, "C"].mean():            df.loc[df.A== b, "D"][i] = "expensive"
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

检查transform,mean然后做np.where


s = df.groupby('A').C.transform('mean')

df['D'] = np.where(df.C>s, 'expensive', 'cheap')

df

Out[158]: 

       A     B   C          D

0    car   red  15      cheap

1    car  blue  20  expensive

2    car  grey  14      cheap

3   bike   red   6      cheap

4   bike  blue   8  expensive

5  phone   red   9      cheap

6  phone  blue  11  expensive

7  phone  grey  10      cheap


查看完整回答
反对 回复 2023-06-20
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

df['D']=np.where(df[['A', 'B', 'C']].groupby('A').apply(lambda x: (x['C'].mean()>=x['C'])),'cheap','expensive')



     A     B   C          D

0    car   red  15      cheap

1    car  blue  20  expensive

2    car  grey  14      cheap

3   bike   red   6  expensive

4   bike  blue   8      cheap

5  phone   red   9      cheap

6  phone  blue  11  expensive

7  phone  grey  10      cheap

怎么运行的


np.where(condition, if met answer, not met answer)



#Apply boolean select to get condition. In this statement we seek to return true if mean is greater than price


condition= df[['A', 'B', 'C']].groupby('A').apply(lambda x: (x['C'].mean()>=x['C']))



if met answer= 'cheap'


not me t answer='expensive'


查看完整回答
反对 回复 2023-06-20
  • 2 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信