从For循环数据帧Python

时间:2018-03-27 17:13:44

标签: python pandas dataframe

如何从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])

3 个答案:

答案 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'})