2017-07-10 5 views
5

कोड बनाने के लिए दो स्तंभों से संख्या कम्बाइन नमूना dataframe बनाने के लिए:एक सरणी

Sample = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': [[.332, .326], [.058, .138]]}, 
    {'account': 'Alpha Co', 'Jan': 200, 'Feb': 210, 'Mar': [[.234, .246], [.234, .395]]}, 
    {'account': 'Blue Inc', 'Jan': 50, 'Feb': 90, 'Mar': [[.084, .23], [.745, .923]]}] 
df = pd.DataFrame(Sample) 

नमूना Dataframe कल्पना:

df: 
    account  Jan  Feb   Mar 
Jones LLC |  150 | 200 | [.332, .326], [.058, .138] 
Alpha Co |  200 | 210 | [[.234, .246], [.234, .395] 
Blue Inc |  50 | 90  | [[.084, .23], [.745, .923] 

मैं एक सूत्र में जनवरी और फ़रवरी कॉलम गठबंधन करने के लिए के लिए देख रहा हूँ एक सरणी, इस सरणी के एक नए कॉलम में outputting।

अपेक्षित उत्पादन:

df: 
    account  Jan  Feb   Mar        New 
Jones LLC |  150 | 200 | [.332, .326], [.058, .138] | [150, 200] 
Alpha Co |  200 | 210 | [[.234, .246], [.234, .395] | [200, 210] 
Blue Inc |  50 | 90  | [[.084, .23], [.745, .923] | [50, 90] 
+1

लागू की गति के प्रति जागरूक रहें। दोनों की तुलना के लिए मेरी पोस्ट देखें। – piRSquared

उत्तर

6

उपयोग df.apply, axis=1 साथ:

In [1980]: df['New'] = df.apply(lambda x: [x['Jan'], x['Feb']], axis=1) 

In [1981]: df 
Out[1981]: 
    Feb Jan        Mar account   New 
0 200 150 [[0.332, 0.326], [0.058, 0.138]] Jones LLC [150, 200] 
1 210 200 [[0.234, 0.246], [0.234, 0.395]] Alpha Co [200, 210] 
2 90 50 [[0.084, 0.23], [0.745, 0.923]] Blue Inc [50, 90] 

आप अपने मूल स्तंभों ड्रॉप करना चाहते हैं, तो आप उपयोग कर सकते हैं

df.drop(['Jan', 'Feb'], axis=1, inplace=True) 

एक तेजी से घुलनशील आयन here पाया जा सकता है।

+1

! धन्यवाद। यह काम किया। मैं कुछ और मिनटों के लिए उत्तर स्वीकार नहीं कर सकता लेकिन मैं करूँगा :) –

3

तुम भी df['New'] = list(zip(df.Feb, df.Jan))

या का उपयोग कर tolistdf['New'] = df.ix[:,0:2].values.tolist()

+1

मुझे यह जवाब पसंद है – piRSquared

6

उपयोग कोशिश कर सकते हैं values.tolist

df.assign(New=df[['Feb', 'Jan']].values.tolist()) 
# inplace... use this 
# df['New'] = df[['Feb', 'Jan']].values.tolist() 

    Feb Jan        Mar account   New 
0 200 150 [[0.332, 0.326], [0.058, 0.138]] Jones LLC [200, 150] 
1 210 200 [[0.234, 0.246], [0.234, 0.395]] Alpha Co [210, 200] 
2 90 50 [[0.084, 0.23], [0.745, 0.923]] Blue Inc [90, 50] 

बड़े डेटा
apply बचना साथ समय तेजी से एक 3000 पंक्ति के साथ 60 से अधिक बार है डेटा ढांचा।

df = pd.concat([df] * 1000, ignore_index=True) 

%timeit df.assign(New=df[['Feb', 'Jan']].values.tolist()) 
%timeit df.assign(New=df.apply(lambda x: [x['Jan'], x['Feb']], axis=1)) 

1000 loops, best of 3: 947 µs per loop 
10 loops, best of 3: 61.7 ms per loop 

और 160 गुना तेजी से 30,000 पंक्ति dataframe के लिए

df = pd.concat([df] * 10000, ignore_index=True) 

100 loops, best of 3: 3.58 ms per loop 
1 loop, best of 3: 586 ms per loop 
+0

यही वह है जो मैं करना चाहता हूं, मुझे लगता है कि 'लागू' बड़े डेटा सेट के लिए अक्षमता है जो केवल 'के लिए एक वृद्धि है लूप ', लेकिन आपने इसे प्रमाणित किया !!! धन्यवाद आप पीआईआर +1 – Wen