繁体   English   中英

如何基于搜索特定列中的数据在 Pandas Dataframe 中选择一行

[英]How to select a row in Pandas Dataframe based on searching a data in a particular column

我有一个与 Pandas 库的 DataFrames 相关的查询。 让,我有一个这样的数据框:

purchase_1 = pd.Series({'Name': 'Chris',
                        'Item Purchased': 'Dog Food',
                        'Cost': 22.50})
purchase_2 = pd.Series({'Name': 'Kevyn',
                        'Item Purchased': 'Kitty Litter',
                        'Cost': 2.50})
purchase_3 = pd.Series({'Name': 'Vinod',
                        'Item Purchased': 'Bird Seed',
                        'Cost': 5.00})

df = pd.DataFrame([purchase_1, purchase_2, purchase_3], index=['Store 1', 'Store 1', 'Store 2'])

我想知道谁购买了该商品的最高成本,或者谁购买了狗粮。 基本上我想在单列中找到单个数据,然后我想选择整行。 我想从所选行的任何列中提取任何数据。 最pythonic的方法是什么?

如果要选择一行 DataFrame 使用boolean indexing并比较最大值:

df1 = df[df['Cost'] == df['Cost'].max()]
print (df1)
          Name Item Purchased  Cost
Store 1  Chris       Dog Food  22.5

或者,如果DataFrame.set_index最大Cost创建Name ,则通过DataFrame.set_indexName列创建索引,然后使用Series.idxmax

a = df.set_index('Name')['Cost'].idxmax()
print (a)
Chris

Dog Food过滤:

df2 = df[df['Item Purchased'] == 'Dog Food']
print (df2)
          Name Item Purchased  Cost
Store 1  Chris       Dog Food  22.5

如果只需DataFrame.loc过滤行Name - 第一个与DataFrame.loc匹配的值 - 输出是Series ,一个或多个值:

s = df.loc[df['Item Purchased'] == 'Dog Food', 'Name']
print (s)
Store 1    Chris
Name: Name, dtype: object

然后选择第一个值:

print (s[0])
Chris

但如果值不存在则返回空Series

s = df.loc[df['Item Purchased'] == 'Cat Food', 'Name']
print (s)
Series([], Name: Name, dtype: object)

因此,如果没有过滤值,则有必要使用替代解决方案选择nextiter作为默认值:

print (next(iter(s), 'no match'))
no match

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM