แยกค่าคอลัมน์ตามดาต้าเฟรมแพนด้าของคอลัมน์อื่น


109

ฉันติดอยู่กับการแยกค่าของการปรับสภาพตัวแปรหนึ่งในตัวแปรอื่น ตัวอย่างเช่น dataframe ต่อไปนี้:

A  B
p1 1
p1 2
p3 3
p2 4

ฉันจะได้รับมูลค่าAเมื่อไหร่B=3? ทุกครั้งที่ฉันแยกค่าของAฉันได้วัตถุไม่ใช่สตริง


ฉันเห็นว่าฉันควรเพิ่มitem()ในตอนท้าย
Anderson Zhu

df.queryและpd.evalดูเหมือนจะเหมาะกับกรณีการใช้งานนี้ สำหรับข้อมูลเกี่ยวกับpd.eval()ครอบครัวของฟังก์ชั่นคุณสมบัติของพวกเขาและกรณีการใช้งานกรุณาเยี่ยมแบบไดนามิกการแสดงออกในการประเมินผลโดยใช้หมีแพนด้า pd.eval ()
cs95

คำตอบ:


197

คุณสามารถใช้locเพื่อรับซีรีส์ที่ตรงตามเงื่อนไขของคุณแล้วilocรับองค์ประกอบแรก:

In [2]: df
Out[2]:
    A  B
0  p1  1
1  p1  2
2  p3  3
3  p2  4

In [3]: df.loc[df['B'] == 3, 'A']
Out[3]:
2    p3
Name: A, dtype: object

In [4]: df.loc[df['B'] == 3, 'A'].iloc[0]
Out[4]: 'p3'

24
ขอบคุณสำหรับความช่วยเหลือของคุณ. df.loc[df['B'] == 3, 'A'].item()ใช้ได้ผลกับฉันด้วย
Anderson Zhu

4
จะเลือกอันใดหาก data frame มีรายการ '3' หลายรายการในคอลัมน์ B
subhash

1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] ใช้ได้ผลสำหรับฉันตัวอย่างนี้สำหรับการเลือกหลายคอลัมน์ควรอยู่ในทูเปิล
มุสตาฟา Uçar

ถ้า df.loc [df ['B'] == 300, 'A']. iloc [0] หมายถึงผลลัพธ์จะเป็นอย่างไร?
user1999109

เห็นได้ชัดว่า .item () เลิกใช้งานแล้วและจะถูกลบออก มีวิธีอื่นในการทำเช่นนี้หรือไม่? ฉันไม่สนใจชื่อของคอลัมน์หรือประเภทข้อมูลซึ่งส่งคืนด้วยเมธอด. loc เพื่อสอบถาม
แดน

42

คุณสามารถลองqueryซึ่งพิมพ์น้อยลง:

df.query('B==3')['A']

แบบสอบถามเป็นสิ่งที่น่าสนใจเพราะเราสามารถเพิ่มส่วนคำสั่งที่ซับซ้อนลงไปได้เช่นกัน
Samir Baid

1
IMHO นี่คือคำตอบที่ดีที่สุด
NLR

27

df[df['B']==3]['A']สมมติว่า df คือแพนด้าของคุณ DataFrame


คุณช่วยให้ลิงค์ที่อธิบายวิธีการนี้ในเอกสารอย่างเป็นทางการของแพนด้าได้ไหม
vasili111

ฉันหมายถึง][ส่วนหนึ่ง
vasili111

11

ใช้df[df['B']==3]['A'].valuesหากคุณต้องการเพียงแค่ไอเท็มเองโดยไม่มีวงเล็บ


คุณช่วยให้ลิงค์ที่อธิบายวิธีการนี้ในเอกสารอย่างเป็นทางการของแพนด้าได้ไหม ฉันหมายถึง][ส่วนหนึ่ง
vasili111

จะส่งคืนผลลัพธ์ด้วย []
Sid

คุณยังต้องใส่[0]ตอนท้ายเพื่อเข้าถึงค่า
rubebop

0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

ฉันยังทำงานเกี่ยวกับการประมวลผลคำสั่งและการแยกข้อมูลสำหรับงานที่ได้รับมอบหมาย

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