从For循环数据帧Python中选择值

从For循环数据帧Python中选择值,python,pandas,dataframe,Python,Pandas,Dataframe,如何从任何引用或解决方案的循环中检索到的结果中获取以下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

如何从任何引用或解决方案的循环中检索到的结果中获取以下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])

你很接近。但是,
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()])
这里有一个完整的例子,如果你想玩它。如果您想为DATAFRAME中的每一个产品生成这个,您可以考虑使用<代码> DF.EngutNo.UnQuess()/代码>而不是显式定义列表,因为您不必单独指定每个产品。

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

你很接近。但是,
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()])
这里有一个完整的例子,如果你想玩它。如果您想为DATAFRAME中的每一个产品生成这个,您可以考虑使用<代码> DF.EngutNo.UnQuess()/代码>而不是显式定义列表,因为您不必单独指定每个产品。

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
我认为df.idxmax()函数是最好的选择

所以对你来说是

for product in products:
     temp = df.loc[product]
     print(temp.loc[temp['Price'].idxmax()])
我认为df.idxmax()函数是最好的选择

所以对你来说是

for product in products:
     temp = df.loc[product]
     print(temp.loc[temp['Price'].idxmax()])

我认为一个简单的
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'})

我认为一个简单的
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'})

你能提供一个你希望得到的数据和结果的小例子吗?我很确定你想要
.idxmax
,但我不确定你到底想要什么。你能提供一个小例子,说明你希望得到的数据和结果吗?我很确定你想要
.idxmax
,但我不确定你到底想要什么来满足需求。谢谢约翰尼·穆迪。符合要求。多谢约翰·穆迪。