首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将分组数据与DataFrame中的某一行进行比较

将分组数据与DataFrame中的某一行进行比较
EN

Stack Overflow用户
提问于 2020-12-23 08:43:16
回答 2查看 49关注 0票数 1

我的数据如下:

代码语言:javascript
复制
df = pd.DataFrame(
    {
        "Mall": ["A", "A", "B", "B", "C", "C"],
        "Category": ["Milk", "Egg", "Beef", "Egg", "Orange", "Egg"],
        "Price": [5, 10, 15, 9, 7, 11]
    },
    columns=["Mall", "Category", "Price"],
)
df

>>>
    Mall    Category    Price
0   A       Milk        5
1   A       Egg         10
2   B       Beef        15
3   B       Egg         9
4   C       Orange      7
5   C       Egg         11

对于每一个商场和类别,我想比较一下鸡蛋的价格差异。

在这种情况下:

商城牛奶价格A-A商城鸡蛋价格

商城鸡蛋价格A-A商城鸡蛋价格

B商城牛肉价格-B商城鸡蛋价格

B商城鸡蛋价格-B商城鸡蛋价格

C商城橘子价格C-C商城鸡蛋价格

C商城鸡蛋价格C-C商城鸡蛋价格

预期成果:

代码语言:javascript
复制
    Mall    Category    Price   Price_diff
0   A       Milk        5       -5
1   A       Egg         10      0
2   B       Beef        15      6
3   B       Egg         9       0
4   C       Orange      7       -4      
5   C       Egg         11      0

我该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-23 08:45:43

EggPrice中的非Egg值与Series.where中的缺失值进行比较,然后使用GroupBy.transformGroupBy.first进行重复egg price,最后用Series.sub减去Price

代码语言:javascript
复制
df['Price_diff'] = (df['Price'].sub(df['Price'].where(df['Category'].eq('Egg'))
                               .groupby(df['Mall']).transform('first')))
print (df)
  Mall Category  Price  Price_diff
0    A     Milk      5        -5.0
1    A      Egg     10         0.0
2    B     Beef     15         6.0
3    B      Egg      9         0.0
4    C   Orange      7        -4.0
5    C      Egg     11         0.0

如果Egg始终是每个组的第二个值,并且每个组只包含2个值:

代码语言:javascript
复制
df['Price_diff'] = df.groupby('Mall')['Price'].diff(-1).fillna(0)
print (df)
  Mall Category  Price  Price_diff
0    A     Milk      5        -5.0
1    A      Egg     10         0.0
2    B     Beef     15         6.0
3    B      Egg      9         0.0
4    C   Orange      7        -4.0
5    C      Egg     11         0.0
票数 1
EN

Stack Overflow用户

发布于 2020-12-23 08:49:54

groupbytransform结合使用

代码语言:javascript
复制
df['Price_diff'] = df.groupby('Mall')['Price'].transform(lambda x: [x.tolist()[0] - x.tolist()[1], 0])

输出:

代码语言:javascript
复制
  Mall Category  Price  Price_diff
0    A     Milk      5          -5
1    A      Egg     10           0
2    B     Beef     15           6
3    B      Egg      9           0
4    C   Orange      7          -4
5    C      Egg     11           0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65421343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档