我有一个名为pricecomp_df的数据,我想比较一下“市场价格”栏目的价格,以及“苹果价格”、“芒果价格”、“西瓜价格”等其他栏目的价格,但根据条件将差异排序:(第一优先是西瓜价格,第二优先是芒果价格,第三栏是苹果价格)。输入数据如下:
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行。有人能帮上忙吗?
发布于 2016-09-07 11:29:45
希望我不会太晚。这样做的目的是根据优先级列表计算差异并覆盖它们。
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 0https://stackoverflow.com/questions/36588522
复制相似问题