ฉันมีสองซีรี่ส์s1
และs2
มีดัชนีเดียวกัน (ไม่ต่อเนื่องกัน) ฉันจะรวมs1
และs2
เป็นสองคอลัมน์ใน DataFrame และเก็บหนึ่งในดัชนีเป็นคอลัมน์ที่สามได้อย่างไร
ฉันมีสองซีรี่ส์s1
และs2
มีดัชนีเดียวกัน (ไม่ต่อเนื่องกัน) ฉันจะรวมs1
และs2
เป็นสองคอลัมน์ใน DataFrame และเก็บหนึ่งในดัชนีเป็นคอลัมน์ที่สามได้อย่างไร
คำตอบ:
ฉันคิดว่า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 ซีรีย์
pd.concat([list_of_dataframes])
เทียบกับการเชื่อมต่อหลายครั้งnew_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
หรือคล้ายกัน
ทำไมคุณไม่ใช้. to_frame หากทั้งสองมีดัชนีเดียวกัน
> = v0.23
a.to_frame().join(b)
< v0.23
a.to_frame().join(b.to_frame())
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
รหัสตัวอย่าง:
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
ถ้าฉันอาจตอบคำถามนี้
พื้นฐานที่อยู่เบื้องหลังการแปลงชุดข้อมูลเป็นกรอบข้อมูลคือการเข้าใจว่า
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)
ไม่แน่ใจว่าฉันเข้าใจคำถามของคุณทั้งหมด แต่นี่คือสิ่งที่คุณต้องการจะทำอย่างไร
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
( index=s1.index
ไม่จำเป็นแม้แต่ที่นี่)
ความเรียบง่ายของโซลูชันขึ้นอยู่กับjoin()
:
df = a.to_frame().join(b)
ฉันใช้นุ่นในการแปลงอาร์เรย์ numpy หรือ iseries ของฉันไปเป็น dataframe จากนั้นเพิ่มและเพิ่มคอลัมน์เพิ่มเติมโดยใช้คีย์เป็น 'การทำนาย' หากคุณต้องการแปลงไฟล์ดาต้ากลับเป็นรายการให้ใช้ values.tolist ()
output=pd.DataFrame(X_test)
output['prediction']=y_pred
list=output.values.tolist()