【问题标题】:Iterating Conditions through Pandas .loc通过 Pandas .loc 迭代条件
【发布时间】:2020-09-14 03:30:22
【问题描述】:

我只是想问问社区,看看有没有更有效的方法。

我在一个数据框中有几行,我正在使用 .loc 过滤 A 行中的值,因为我可以对 B 行执行计算。

我可以轻松地做类似...

filter_1 = df.loc['Condition'] = 1

然后对我需要的 B 行进行数学计算。

但是我必须经历很多条件,所以我想知道是否可以列出条件,然后用更少的代码行通过 .loc 函数迭代它们?

如果我创建一个列表,然后通过循环迭代条件,这样的事情会起作用吗?

谢谢!

这个例子得到了我想要的大部分。在这个例子中,我只需要它显示 6.4 和 7.0。我该如何操作迭代,因为它会显示“a”行中唯一值的结果?

import pandas as pd

a = [1,2,1,2,1,2,1,2,1,2]
b = [5,1,3,5,7,20,9,5,8,4]

col = ['a', 'b']

list_1 = []

for i, j in zip(a,b):
    list_1.append([i,j])

df1 = pd.DataFrame(list_1, columns= col)

for i in a:
    aa = df1[df1['a'].isin([i])]
    aa1 = aa['b'].mean()
    print (aa1)

【问题讨论】:

  • 请解释清楚。哪种情况?
  • 过滤行 A 以获取 1 到 10 之间的值现在可以工作。我只需要查看范围内的每个值并在 B 行上执行计算。一个简单的计算,例如平均值或标准偏差。我正在根据我必须在 A 行上过滤的许多条件对 B 行进行简单的统计分析。

标签: python pandas


【解决方案1】:

使用集合的解决方案

set_a = set(a)

for i in set_a:
    aa = df[df['a'].isin([i])]
    aa1 = aa['b'].mean()
    print (aa1)

使用 pandas 均值函数的解决方案

这是你要找的吗?

import pandas as pd

a = [1,2,1,2,1,2,1,2,1,2]
b = [5,1,3,5,7,20,9,5,8,4]
df = pd.DataFrame({'a':a,'b':b})

print (df)

print(df.groupby('a').mean())

由此得出的结果是:

原始数据框df:

   a   b
0  1   5
1  2   1
2  1   3
3  2   5
4  1   7
5  2  20
6  1   9
7  2   5
8  1   8
9  2   4

df['a'] 的平均值为:

     b
a     
1  6.4
2  7.0

【讨论】:

  • 是的!那很完美。谢谢你。只是为了练习,我将如何更改上面的 for 循环以获得这些结果?
  • 你可以做set_a = set(a)。它会给你一个[1,2]的结果。然后你只搜索一次。让我给你代码,这样你就可以比较看看它是否对齐。
  • 如果我回答了您的问题,请投票并标记为已回答。请阅读当有人answers您的问题时该怎么做。
  • @A.J.Nock,我已经为您提供了使用循环代码打印相同内容的代码。看看这是否与您的代码匹配。祝你学习顺利。你做得很好。
【解决方案2】:

给你:

df = df[(df['A'] > 1) & (df['A'] < 10)]

【讨论】:

  • 谢谢分享。我刚刚发布了一个迭代,它主要完成了我想要做的事情。我现在只需要它为每个唯一值打印一次。
猜你喜欢
  • 2015-02-14
  • 1970-01-01
  • 2021-02-24
  • 2019-11-15
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
相关资源
最近更新 更多