2016-04-13 7 views
2

私はpricecomp_dfという名前のデータフレームを持っています。「市場価格」の列と「apple price」、「mangoes価格は「スイカ価格」ですが、条件:(最初はスイカ価格、マンゴーは2番目、リンゴは3番目)に基づいて差を優先します。だからここに私は唯一の違いを取らなければならない最初の行はちょうどリンゴの価格と市場価格はその後、彼らの差分を取る持っていますが、2行目、私たちはリンゴを持って、マンゴーの価格Pythonの条件に基づいてパンダのデータフレームの2つの列を区別する

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 

:入力データフレームを以下に示します。市場価格とマンゴー価格の間にある。同様に優先順位に基づいて差をとる。また、3つの価格すべての行をスキップしてください。誰もこれを助けることができますか?

+0

誰もが私にこれを助けることができますか? – User1090

+0

3年後、私は解決策を思いついた。まだ@ User1090が必要でしたか? – MERose

答えて

12

私はあまりにも遅くはありません。アイデアは差を計算し、あなたの優先順位リストに従ってそれらを上書きすることです。

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 
関連する問題