पंडों में एक DataFrame में दो श्रृंखला का संयोजन


278

मेरे पास दो श्रृंखलाएं हैं s1और s2समान (गैर-लगातार) सूचकांकों के साथ। मैं एक DataFrame में दो कॉलम होने s1और गठबंधन करने और s2सूचकांक में से एक को तीसरे कॉलम के रूप में कैसे रख सकता हूं?

जवाबों:


416

मुझे लगता concatहै कि यह करने का एक अच्छा तरीका है। यदि वे मौजूद हैं तो यह श्रृंखला के नाम विशेषताओं को कॉलम के रूप में उपयोग करता है (अन्यथा यह बस उन्हें संख्या देता है):

In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1')

In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2')

In [3]: pd.concat([s1, s2], axis=1)
Out[3]:
   s1  s2
A   1   3
B   2   4

In [4]: pd.concat([s1, s2], axis=1).reset_index()
Out[4]:
  index  s1  s2
0     A   1   3
1     B   2   4

नोट: यह 2 से अधिक श्रृंखला तक फैला हुआ है।


5
यह वास्तव में नकल करने से बचता है (जैसा कि तानाशाह समाधान की तुलना में)
जेफ

एक उदाहरण में, यह मुझे 'ValueError: एक सरणी से अधिक तत्व वाला सत्य मान अस्पष्ट है। A.any () या a.all () '- किसी भी विचार का उपयोग करें?
user7289

@ user7289 को यकीन नहीं है कि यह कहां से आएगा, क्या आप इसे एक और सवाल पूछ सकते हैं?
एंडी हेडन

@AndyHayden: क्या होगा अगर एक या दोनों इंडेक्स के साथ डुप्लिकेट हैं?
मन्नगिया

2
@dafinguzman क्या "लगातार इस फ़ंक्शन का पुन: उपयोग कर रहा है" का अर्थ है कि आपको कई बार या इसी तरह से एक बार pd.concat([list_of_dataframes]) बनाम कॉनकैट करना पसंद करना चाहिए new_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
एंडी हेडन

38

यदि आप दोनों का अनुक्रमणिका समान है तो आप .to_frame का उपयोग क्यों नहीं करते?

> = v0.23

a.to_frame().join(b)

< v0.23

a.to_frame().join(b.to_frame())

4
शायद यह अधिक उचित होगा: a.to_frame (नाम = 'ए')। (b.to_frame (नाम = 'बी')
सम्मिलित हों

33

पंडों को स्वचालित रूप से इन पारित श्रृंखलाओं में संरेखित किया जाएगा और संयुक्त सूचकांक बनाएंगे वे यहां एक ही होते हैं। reset_indexसूचकांक को एक कॉलम में ले जाता है।

In [2]: s1 = Series(randn(5),index=[1,2,4,5,6])

In [4]: s2 = Series(randn(5),index=[1,2,4,5,6])

In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index()
Out[8]: 
   index        s1        s2
0      1 -0.176143  0.128635
1      2 -1.286470  0.908497
2      4 -0.995881  0.528050
3      5  0.402241  0.458870
4      6  0.380457  0.072251

16

उदाहरण कोड:

a = pd.Series([1,2,3,4], index=[7,2,8,9])
b = pd.Series([5,6,7,8], index=[7,2,8,9])
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})

पंडों आपको कुंजी के रूप में मान और स्तंभ नामों के साथ एक DataFrameसे एक बनाने की अनुमति देता है । जब यह मान के रूप में मिलता है , तो यह सूचकांक के हिस्से के रूप में सूचकांक का उपयोग करता है । यह डेटा संरेखण पंडों के मुख्य भत्तों में से एक है। नतीजतन, जब तक आपकी अन्य आवश्यकताएं नहीं होती हैं, तब तक नए सिरे से बनाए गए मूल्य में दोहराव होता है। उपरोक्त उदाहरण में, के समान डेटा है ।dictSeriesSeriesSeriesDataFrameDataFramedata['idx_col']data.index


13

अगर मैं इसका जवाब दे सकता हूं।

श्रृंखला को डेटा फ्रेम में परिवर्तित करने के पीछे मूल सिद्धांतों को समझना है

1. वैचारिक स्तर पर, डेटा फ्रेम में प्रत्येक स्तंभ एक श्रृंखला है।

2. और, प्रत्येक कॉलम नाम एक प्रमुख नाम है जो एक श्रृंखला में मैप करता है।

यदि आप दो अवधारणाओं को ध्यान में रखते हैं, तो आप श्रृंखला को डेटा फ्रेम में बदलने के कई तरीकों के बारे में सोच सकते हैं। एक आसान समाधान इस प्रकार होगा:

यहां दो श्रृंखला बनाएं

import pandas as pd

series_1 = pd.Series(list(range(10)))

series_2 = pd.Series(list(range(20,30)))

केवल वांछित कॉलम नामों के साथ एक खाली डेटा फ़्रेम बनाएं

df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])

मानचित्रण अवधारणा का उपयोग करके डेटा फ़्रेम के अंदर श्रृंखला मान डालें

df['Column_name#1'] = series_1

df['Column_name#2'] = series_2

अब परिणाम देखें

df.head(5)

6

यकीन नहीं है कि मैं आपके सवाल को पूरी तरह से समझता हूं, लेकिन क्या आप ऐसा करना चाहते हैं?

pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)

( index=s1.indexयहाँ भी आवश्यक नहीं है)



1

मैंने पंडों का उपयोग अपने संख्यात्मक सरणी या आइरिस को एक डेटाफ्रेम में परिवर्तित करने के लिए किया और फिर अतिरिक्त कॉलम को 'भविष्यवाणी' के रूप में कुंजी से जोड़ा। यदि आपको किसी सूची में वापस कनवर्ट की गई डेटाफ्रेम की आवश्यकता है, तो values.tolist () का उपयोग करें

output=pd.DataFrame(X_test)
output['prediction']=y_pred

list=output.values.tolist()     
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.