[英]Select particular row from a DataFrame based on value in a column in pandas
[英]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_index
按Name
列创建索引,然后使用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)
因此,如果没有过滤值,则有必要使用替代解决方案选择next
和iter
作为默认值:
print (next(iter(s), 'no match'))
no match
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.