การใช้ Python Pandas ฉันพยายามค้นหาCountry
& Place
ด้วยค่าสูงสุด
สิ่งนี้ส่งคืนค่าสูงสุด:
data.groupby(['Country','Place'])['Value'].max()
แต่วิธีการที่ฉันจะได้รับที่สอดคล้องกันCountry
และPlace
ชื่อ?
การใช้ Python Pandas ฉันพยายามค้นหาCountry
& Place
ด้วยค่าสูงสุด
สิ่งนี้ส่งคืนค่าสูงสุด:
data.groupby(['Country','Place'])['Value'].max()
แต่วิธีการที่ฉันจะได้รับที่สอดคล้องกันCountry
และPlace
ชื่อ?
คำตอบ:
สมมติว่าdf
มีดัชนีที่ไม่ซ้ำกันสิ่งนี้จะให้แถวที่มีค่าสูงสุด:
In [34]: df.loc[df['Value'].idxmax()]
Out[34]:
Country US
Place Kansas
Value 894
Name: 7
โปรดทราบว่าidxmax
ดัชนีผลตอบแทนที่ป้าย ดังนั้นหาก DataFrame มีข้อมูลซ้ำกันในดัชนีป้ายกำกับอาจระบุแถวไม่ซ้ำกันดังนั้นdf.loc
อาจส่งคืนมากกว่าหนึ่งแถว
ดังนั้นหากdf
ไม่มีดัชนีที่ไม่ซ้ำกันคุณต้องทำให้ดัชนีไม่ซ้ำกันก่อนดำเนินการตามด้านบน ขึ้นอยู่กับ DataFrame บางครั้งคุณสามารถใช้stack
หรือset_index
ทำให้ดัชนีไม่ซ้ำกันได้ หรือคุณสามารถรีเซ็ตดัชนี (เพื่อให้แถวเรียงลำดับใหม่โดยเริ่มต้นที่ 0):
df = df.reset_index()
df[df['Value']==df['Value'].max()]
สิ่งนี้จะส่งคืนทั้งแถวด้วยค่าสูงสุด
ประเทศและสถานที่เป็นดัชนีของซีรี่ส์หากคุณไม่ต้องการดัชนีคุณสามารถตั้งค่าas_index=False
:
df.groupby(['country','place'], as_index=False)['value'].max()
แก้ไข:
ดูเหมือนว่าคุณต้องการสถานที่ที่มีมูลค่าสูงสุดสำหรับทุกประเทศรหัสต่อไปนี้จะทำสิ่งที่คุณต้องการ:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
ฉันคิดว่าวิธีที่ง่ายที่สุดในการคืนค่าแถวที่มีค่าสูงสุดคือการรับดัชนี argmax()
สามารถใช้เพื่อส่งคืนดัชนีของแถวที่มีค่ามากที่สุด
index = df.Value.argmax()
ตอนนี้ดัชนีสามารถใช้เพื่อรับคุณสมบัติสำหรับแถวนั้น:
df.iloc[df.Value.argmax(), 0:2]
ใช้index
แอตทริบิวต์ของDataFrame
. โปรดทราบว่าฉันไม่ได้พิมพ์แถวทั้งหมดในตัวอย่าง
In [14]: df = data.groupby(['Country','Place'])['Value'].max()
In [15]: df.index
Out[15]:
MultiIndex
[Spain Manchester, UK London , US Mchigan , NewYork ]
In [16]: df.index[0]
Out[16]: ('Spain', 'Manchester')
In [17]: df.index[1]
Out[17]: ('UK', 'London')
คุณยังสามารถรับค่าจากดัชนีนั้น:
In [21]: for index in df.index:
print index, df[index]
....:
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562
ขออภัยที่เข้าใจผิดว่าคุณต้องการอะไรลองทำตาม:
In [52]: s=data.max()
In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854
ในการพิมพ์ประเทศและสถานที่ที่มีค่าสูงสุดให้ใช้รหัสบรรทัดต่อไปนี้
print(df[['Country', 'Place']][df.Value == df.Value.max()])
ทางออกของฉันสำหรับการค้นหาค่าสูงสุดในคอลัมน์:
df.ix[df.idxmax()]
ขั้นต่ำ:
df.ix[df.idxmin()]
ฉันขอแนะนำให้ใช้nlargest
เพื่อประสิทธิภาพที่ดีขึ้นและโค้ดที่สั้นลง นำเข้าpandas
df[col_name].value_counts().nlargest(n=1)
คุณสามารถใช้ได้:
พิมพ์ (df [df ['Value'] == df ['Value']. max ()])
นำเข้าแพนด้า
df คือกรอบข้อมูลที่คุณสร้างขึ้น
ใช้คำสั่ง:
df1=df[['Country','Place']][df.Value == df['Value'].max()]
ซึ่งจะแสดงประเทศและสถานที่ที่มีค่าสูงสุด
ฉันพบข้อผิดพลาดที่คล้ายกันขณะพยายามนำเข้าข้อมูลโดยใช้แพนด้าคอลัมน์แรกในชุดข้อมูลของฉันมีช่องว่างก่อนเริ่มคำ ฉันลบช่องว่างออกแล้วมันก็เหมือนมีเสน่ห์ !!