首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于python条件的大熊猫两栏数据差异

问基于python条件的大熊猫两栏数据差异
EN

Stack Overflow用户
提问于 2016-04-13 04:21:14
回答 1查看 50.1K关注 0票数 11

我有一个名为pricecomp_df的数据,我想比较一下“市场价格”栏目的价格,以及“苹果价格”、“芒果价格”、“西瓜价格”等其他栏目的价格,但根据条件将差异排序:(第一优先是西瓜价格,第二优先是芒果价格,第三栏是苹果价格)。输入数据如下:

代码语言:javascript
复制
   code  apple price  mangoes price  watermelon price  market price
0   101          101            NaN               NaN           122
1   102          123            123               NaN           124
2   103          NaN            NaN               NaN           123
3   105          123            167               NaN           154
4   107          165            NaN               177           176
5   110          123            NaN               NaN           123

在这里,第一排只有苹果价格和市场价格,然后取他们的差额,但是在第二排,我们有苹果,芒果价格,所以我只需要取市价和芒果价格之间的差额。同样,根据优先级条件获取差异。同时跳过所有三种价格的nan行。有人能帮上忙吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-07 11:29:45

希望我不会太晚。这样做的目的是根据优先级列表计算差异并覆盖它们。

代码语言:javascript
复制
import numpy as np
import pandas as pd

df = pd.DataFrame({'code': [101, 102, 103, 105, 107, 110],
                   'apple price': [101, 123, np.nan, 123, 165, 123],
                   'mangoes price': [np.nan, 123, np.nan, 167, np.nan, np.nan],
                   'watermelon price': [np.nan, np.nan, np.nan, np.nan, 177, np.nan],
                   'market price': [122, 124, 123, 154, 176, 123]})

# Calculate difference to apple price
df['diff'] = df['market price'] - df['apple price']
# Overwrite with difference to mangoes price
df['diff'] = df.apply(lambda x: x['market price'] - x['mangoes price'] if not np.isnan(x['mangoes price']) else x['diff'], axis=1)
# Overwrite with difference to watermelon price
df['diff'] = df.apply(lambda x: x['market price'] - x['watermelon price'] if not np.isnan(x['watermelon price']) else x['diff'], axis=1)

print df
   apple price  code  mangoes price  market price  watermelon price  diff
0          101   101            NaN           122               NaN    21
1          123   102            123           124               NaN     1
2          NaN   103            NaN           123               NaN   NaN
3          123   105            167           154               NaN   -13
4          165   107            NaN           176               177    -1
5          123   110            NaN           123               NaN     0
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36588522

复制
相关文章

相似问题

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