如何使用 for 循环过滤熊猫数据框中的观察结果?

Posted

技术标签:

【中文标题】如何使用 for 循环过滤熊猫数据框中的观察结果?【英文标题】:How to filter observations in pandas data frame using a for-loop? 【发布时间】:2020-01-14 21:01:42 【问题描述】:

我有一个 pandas 数据框,其中包含我感兴趣的三列(城市、国家和运动队)。我想在 Country = Italy 和 Sports Team = Soccer 的地方过滤它,然后打印出符合该标准的城市。它必须在 for 循环中完成...

我试过了:

for i,a in mydf.iterrows():
    if mydf['Country'][i] == "Italy":
    if mydf['Sports Team'][a] == "Soccer":
    Print('City')

它说:一个系列的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

【问题讨论】:

欢迎来到 ***。 SO 不是代码编写服务。请提供一些示例输入和所需的输出以及您尝试过的内容。 【参考方案1】:

试试:

    mydf[(mydf['Country'] == 'Italy')&(mydf['Sports Team'] == 'Soccer')]['City']

这应该会为您提供符合您条件的城市的 DataFrame 列。

【讨论】:

【参考方案2】:

有多种过滤熊猫数据框的方法,但由于您使用的是iterrows(),所以我已经使用它来回答了,

import pandas as pd

# create the dataframe
my_data = [
            'Country': 'Italy',
            'City': 'City 1',
            'Sports Team': 'Soccer'
        ,
        
            'Country': 'Italy',
            'City': 'City 2',
            'Sports Team': 'Soccer'
        ]

mydf = pd.DataFrame(my_data)

for index, row in mydf.iterrows():
    if row['Country'] == 'Italy' and row['Sports Team'] == 'Soccer':
        print(row['City'])

mydf 看起来像,

   City     Country    Sports Team
0  City 1   Italy      Soccer
1  City 2   Italy      Soccer

输出将是,

City 1
City 2

【讨论】:

【参考方案3】:

试试..

最好使用 .loc 和 .iloc

数据帧示例:

>>> mydf
     City Country Sports Team
0  City 1   Italy      Soccer
1  City 2   Italy      Soccer
2  City 3   Spain      Soccer
3  City 4  Brazil    Football
4  City 2   Italy    Football

结果:

>>> mydf.loc[(mydf['Country'] == 'Italy') &  (mydf['Sports Team'] == 'Soccer')]['City']
0    City 1
1    City 2
Name: City, dtype: object

【讨论】:

以上是关于如何使用 for 循环过滤熊猫数据框中的观察结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 for 循环构建和填充熊猫数据框? [复制]

确定熊猫数据框中的列值何时更改

如何从熊猫数据框中的当前行中减去前一行并将其应用于每一行;不使用循环?

Groupby 并根据熊猫数据框中的其他列比较/过滤特定组

如何将包装为字符串的向量转换为熊猫数据框中的numpy数组?

使用 for 循环、if 循环和 zip 迭代 panda 数据帧和列表