รวมสองซีรี่ส์เข้ากับ DataFrame ในนุ่น


278

ฉันมีสองซีรี่ส์s1และs2มีดัชนีเดียวกัน (ไม่ต่อเนื่องกัน) ฉันจะรวมs1และs2เป็นสองคอลัมน์ใน DataFrame และเก็บหนึ่งในดัชนีเป็นคอลัมน์ที่สามได้อย่างไร

คำตอบ:


417

ฉันคิดว่าconcatเป็นวิธีที่ดีในการทำเช่นนี้ หากมีอยู่จะใช้แอตทริบิวต์ name ของ Series เป็นคอลัมน์ (ไม่เช่นนั้นจะเป็นเพียงตัวเลข):

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
นี้จริงหลีกเลี่ยงการคัดลอกเกินไป (เมื่อเทียบกับวิธีการแก้ปัญหา Dict) ที่
เจฟฟ์

ในตัวอย่างหนึ่งดูเหมือนว่าจะบอกฉันว่า 'ValueError: ค่าความจริงของอาร์เรย์ที่มีองค์ประกอบมากกว่าหนึ่งรายการนั้นไม่ชัดเจน ใช้ a.any () หรือ a.all () '- ความคิดใด ๆ
user7289

@ user7289 ไม่แน่ใจว่าจะมาจากไหนคุณถามคำถามนี้เป็นคำถามอื่นได้หรือไม่
Andy Hayden

@AndyHayden: จะเกิดอะไรขึ้นหากมีการซ้ำซ้อนตามดัชนีหนึ่งหรือทั้งสอง
Mannaggia

2
@dafinguzman สิ่งที่ "นำฟังก์ชั่นนี้มาใช้ซ้ำอย่างต่อเนื่อง" หมายความว่าคุณควรจะทำ concat เมื่อ pd.concat([list_of_dataframes])เทียบกับการเชื่อมต่อหลายครั้งnew_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])หรือคล้ายกัน
Andy Hayden

38

ทำไมคุณไม่ใช้. to_frame หากทั้งสองมีดัชนีเดียวกัน

> = v0.23

a.to_frame().join(b)

< v0.23

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

4
บางทีนี่อาจจะเหมาะสมกว่า: a.to_frame (name = 'a'). เข้าร่วม (b.to_frame (name = 'b'))
user3282777

33

Pandas จะจัดแนวสิ่งที่ผ่านไปเหล่านี้โดยอัตโนมัติและสร้างดัชนีร่วมพวกเขาจะเหมือนกันที่นี่ 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จากdictกับด้วยSeriesเป็นค่าและชื่อคอลัมน์เป็นกุญแจ เมื่อพบว่าSeriesเป็นค่าจะใช้Seriesดัชนีเป็นส่วนหนึ่งของDataFrameดัชนี การจัดแนวข้อมูลนี้เป็นหนึ่งใน perks หลักของนุ่น ดังนั้นถ้าคุณมีความต้องการอื่น ๆ ที่สร้างขึ้นใหม่DataFrameมีค่าซ้ำ ในตัวอย่างข้างต้นที่มีข้อมูลเช่นเดียวกับdata['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

ฉันใช้นุ่นในการแปลงอาร์เรย์ numpy หรือ iseries ของฉันไปเป็น dataframe จากนั้นเพิ่มและเพิ่มคอลัมน์เพิ่มเติมโดยใช้คีย์เป็น 'การทำนาย' หากคุณต้องการแปลงไฟล์ดาต้ากลับเป็นรายการให้ใช้ values.tolist ()

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

list=output.values.tolist()     
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.