如何从for循环中检索到的任何参考或解决方案中获得以下csv最高价格的行?
import pandas as pd
import numpy as np
df = pd.read_csv('/Users/caleb/ic/US_FINAL.csv',names=['ProductName', 'Year', 'Production', 'Price'])
df.set_index("ProductName",inplace=True)
products=['FortuneCookie']
for product in products:
print(df.loc[product])
答案 0 :(得分:1)
你很亲密。但df.loc[product]
并没有按照你的意愿行事。您想要找到df['ProductName'] == product
的位置,因此子集由df.loc[df['ProductName']==product]
给出。其余的只是确定价格最高的行。
for product in products:
print(df.loc[df.Price == df[df.ProductName == product]['Price'].max()])
如果你想玩它,这是一个完整的例子。如果要为数据框中的每个产品生成此内容,可以考虑使用df.ProductName.unique()
而不是明确定义列表,因为您不必单独指定每个产品。
import pandas as pd
df = pd.DataFrame({'ProductName': ['Sandwich', 'FortuneCookie', 'FortuneCookie', 'Sandwich'],
'Year': [2010, 2010, 2011, 2009],
'Production': [17, 18, 101, 17],
'Price': [21.11, 17.82, 19.99, 20.13]})
products = df.ProductName.unique()
for product in products:
print(df.loc[df.Price == df[df.ProductName == product]['Price'].max()])
Price ProductName Production Year
0 21.11 Sandwich 17 2010
Price ProductName Production Year
2 19.99 FortuneCookie 101 2011
答案 1 :(得分:0)
我认为df.idxmax()函数是你最好的选择
所以对你来说就是
for product in products:
temp = df.loc[product]
print(temp.loc[temp['Price'].idxmax()])
答案 2 :(得分:0)
我认为一个简单的groupby
函数可以帮到你:
# using data from @ALLoLz answer
df = pd.DataFrame({'ProductName': ['Sandwich', 'FortuneCookie', 'FortuneCookie', 'Sandwich'],
'Year': [2010, 2010, 2011, 2009],
'Production': [17, 18, 101, 17],
'Price': [21.11, 17.82, 19.99, 20.13]})
df.groupby('ProductName')['Price'].max()
# alternative
# df.groupby('ProductName').agg({'Price':'max'})