วิธีใช้วัตถุ python pandas groupby หรือ .DataFrameGroupBy เพื่อสร้างรายการชุดค่าผสมที่ไม่ซ้ำใคร

มีวิธีที่มีประสิทธิภาพมากกว่าในการใช้วัตถุ pandas groupby หรือ pandas.core.groupby.DataFrameGroupBy เพื่อสร้างรายการ ซีรีส์ หรือ dataframe ที่ไม่ซ้ำใคร โดยที่ฉันต้องการชุดค่าผสมที่ไม่ซ้ำกันของ 2 คอลัมน์จาก N คอลัมน์ เช่น หากฉันมีคอลัมน์: วันที่ ชื่อ รายการที่ซื้อ และฉันแค่ต้องการทราบว่าชื่อและวันที่ที่ไม่ซ้ำกันรวมกัน ก็ใช้ได้ดี:

y = x.groupby(['Date','Name']).count()
y = y.reset_index()[['Date', 'Name']]

แต่ฉันรู้สึกว่าควรจะมีวิธีการใช้ที่สะอาดกว่านี้

y = x.groupby(['Date','Name'])

แต่ y.index ให้ข้อผิดพลาดแก่ฉัน แม้ว่า y.keys จะใช้งานได้ก็ตาม สิ่งนี้ทำให้ฉันถามคำถามทั่วไปว่าวัตถุ pandas.core.groupby.DataFrameGroupBy สะดวกสำหรับอะไร

ขอบคุณ!


person arosner09    schedule 27.08.2014    source แหล่งที่มา
comment
คุณต้องการอะไรโดยที่ y.keys ไม่ได้ให้?   -  person BrenBarn    schedule 27.08.2014
comment
y.index แจ้งข้อผิดพลาดให้ฉันทราบ โปรดแสดงข้อผิดพลาดนี้ได้ไหม เป็นการดีที่มีตัวอย่าง DataFrame ซึ่งแสดงให้เห็น   -  person Andy Hayden    schedule 27.08.2014


คำตอบ (1)


คุณไม่จำเป็นต้องใช้ -- และจริงๆ แล้วไม่ควรใช้ -- groupby ที่นี่ คุณสามารถใช้ drop_duplicates เพื่อรับแถวที่ไม่ซ้ำแทน:

x.drop_duplicates(['Date','Name'])

การสาธิต:

In [156]: x = pd.DataFrame({'Date':[0,1,2]*2, 'Name':list('ABC')*2})

In [158]: x
Out[158]: 
   Date Name
0     0    A
1     1    B
2     2    C
3     0    A
4     1    B
5     2    C

In [160]: x.drop_duplicates(['Date','Name'])
Out[160]: 
   Date Name
0     0    A
1     1    B
2     2    C

คุณไม่ควรใช้ groupby เพราะ

  1. x.groupby(['Date','Name']).count() ทำการนับจำนวนองค์ประกอบในแต่ละกลุ่ม แต่ไม่ได้ใช้การนับ -- เป็นการคำนวณที่สิ้นเปลือง
  2. x.groupby(['Date','Name']).count() ทำให้เกิด AttributeError หาก x มีเพียง Date และ Name คอลัมน์
  3. drop_duplicates เร็วกว่ามากสำหรับจุดประสงค์นี้

ใช้ groupby เมื่อคุณต้องการดำเนินการบางอย่างกับแต่ละกลุ่ม เช่น การนับจำนวนองค์ประกอบในแต่ละกลุ่ม หรือคำนวณสถิติบางอย่าง (เช่น ผลรวมหรือค่าเฉลี่ย ฯลฯ) ต่อกลุ่ม

person unutbu    schedule 27.08.2014