ในกรณีของฉันฉันมีซีรีส์แพนด้าที่มีค่าเป็นตัวละคร :
Out[67]
0 (H, H, H, H)
1 (H, H, H, T)
2 (H, H, T, H)
3 (H, H, T, T)
4 (H, T, H, H)
ดังนั้นฉันสามารถใช้การจัดทำดัชนีเพื่อกรองชุด apply
แต่เพื่อสร้างดัชนีที่ฉันต้องการ เงื่อนไขของฉันคือ "ค้นหาสิ่งทอทั้งหมดที่มีตัว 'H' เพียงตัวเดียว
series_of_tuples[series_of_tuples.apply(lambda x: x.count('H')==1)]
ฉันยอมรับว่ามันไม่ใช่ "chainable" (เช่นสังเกตว่าฉันทำซ้ำseries_of_tuples
สองครั้งคุณต้องจัดเก็บชุดชั่วคราวใด ๆ ลงในตัวแปรเพื่อให้คุณสามารถเรียกใช้ (... ) ได้)
นอกจากนี้ยังอาจมีวิธีการอื่น ๆ (นอกจากนี้.apply(...)
) ซึ่งสามารถใช้งานองค์ประกอบเพื่อสร้างดัชนีบูลีน
คำตอบอื่น ๆ อีกมากมาย (รวมถึงคำตอบที่ยอมรับ) โดยใช้ฟังก์ชัน chainable เช่น:
.compress()
.where()
.loc[]
[]
สิ่งเหล่านี้ยอมรับ callables (lambdas) ซึ่งใช้กับ Seriesไม่ใช่กับค่าแต่ละค่าในชุดเหล่านั้น!
ดังนั้น Series of tuples ของฉันจึงทำงานแปลก ๆ เมื่อฉันพยายามใช้เงื่อนไขข้างต้น / callable / lambda กับฟังก์ชัน chainable ใด ๆ เช่น.loc[]
:
series_of_tuples.loc[lambda x: x.count('H')==1]
สร้างข้อผิดพลาด:
KeyError: 'ระดับ H ต้องเหมือนกับชื่อ (ไม่มี)'
ฉันสับสนมาก แต่ดูเหมือนว่าจะใช้ฟังก์ชันSeries.countseries_of_tuples.count(...)
ซึ่งไม่ใช่สิ่งที่ฉันต้องการ
ฉันยอมรับว่าโครงสร้างข้อมูลทางเลือกอาจดีกว่า:
- ประเภทข้อมูลประเภท?
- Dataframe (แต่ละองค์ประกอบของทูเปิลกลายเป็นคอลัมน์)
- ชุดของสตริง (เพียงแค่เชื่อมสิ่งที่ถูกทับเข้าด้วยกัน):
สิ่งนี้จะสร้างชุดของสตริง (เช่นโดยการต่อทูเพิลการรวมอักขระในทูเพิลในสตริงเดียว)
series_of_tuples.apply(''.join)
ดังนั้นฉันจึงสามารถใช้chainable ได้Series.str.count
series_of_tuples.apply(''.join).str.count('H')==1