2017-08-15 3 views
1

x = "1,2,3,4,5,6" などのカンマ区切りのint値が文字列に含まれています。 xの値の合計?合計の文字列を集計する方法は、パンダのDataFrame列のserval番号を持っています

私が試み:

values = x.split(",").map(lambda a:int(a)) 
sum(values) 

AttributeError: 'list' object has no attribute 'map'

を実際に、私はパンダのデータフレームを有するようなデータフォーマットを有する:

import numpy as np 
import pandas as pd 
df = pd.DataFrame({'id':[100,101,201], 
        'prices_a':['1,2,3','4,5,6','7,8,9'], 
        'prices_b':['1,2,3','2,6,6','3,5,8']}) 

ので、次のようになります

id  prices_a prices_b 
0 100 1,2,3 1,2,3 
1 101 4,5,6 2,6,6 
2 201 7,8,9 3,5,8 

I希望比較する新しい列diffを追加してくださいprices_a & prices_b,それらが同じであれば、df['diff'] = 'match'sumの列が行(axis=1)あたりsumstr.splitastypeを使用するためにそれ以外の場合は、df['diff'] = sum(prices_a values) - sum(prices_b b values)

答えて

1

あなたは、numpy.whereを使用することができます。

a = df['prices_a'].str.split(',', expand=True).astype(float).sum(axis=1) 
b = df['prices_b'].str.split(',', expand=True).astype(float).sum(axis=1) 

print (a) 
0  6.0 
1 15.0 
2 24.0 
dtype: float64 

print (b) 
0  6.0 
1 14.0 
2 16.0 
dtype: float64 

df['df'] = np.where(df['prices_a'] == df['prices_b'], 'match', a - b) 
print (df) 
    id prices_a prices_b  df 
0 100 1,2,3 1,2,3 match 
1 101 4,5,6 2,6,6 1.0 
2 201 7,8,9 3,5,8 8.0 

しかし、良いとは限りません文字列と数値を混在させるそれでは

が使用可能性が代わりに例えばNaNmatchです:

df['diff'] = np.where(df['prices_a'] == df['prices_b'], np.nan, a - b) 
print (df) 
    id prices_a prices_b diff 
0 100 1,2,3 1,2,3 NaN 
1 101 4,5,6 2,6,6 1.0 
2 201 7,8,9 3,5,8 8.0 
+0

どうもありがとうございました。ところで、私はNaNの使用に関するあなたの提案を理解しています。質問は簡素化され、プロダクション環境では、提案されたようによりエレガントになります。 –

+0

喜んで助けることができます!どういたしまして! – jezrael

関連する問題