python - 如何根据不同的索引阈值过滤数据帧

标签 python python-3.x pandas dataframe

我有一个像这样的数据框和字典:

thresholds = {'column':{'A':10,'B':11,'C':9}}

df:
    Column
A     13
A     7
A     11
B     12
B     14
B     14
C     7
C     8
C     11

对于每个索引组,我想计算小于阈值和大于阈值的值的计数。 所以我的输出如下所示:

df:
    Values<Thr  Values>Thr
A       1          2
B       0          3
C       2          1

谁能帮我解决这个问题

最佳答案

您可以使用:

import numpy as np

t = df.index.to_series().map(thresholds['column'])

out = (pd.crosstab(df.index, np.where(df['Column'].gt(t), 'Values>Thr', 'Values≤Thr'))
         .rename_axis(index=None, columns=None)
       )

输出:

   Values>Thr  Values≤Thr
A           2           1
B           3           0
C           1           2

语法变体

out = (pd.crosstab(df.index, df['Column'].gt(t))
         .rename_axis(index=None, columns=None)
         .rename(columns={False: 'Values≤Thr', True: 'Values>Thr'})
      )

根据字典中的键应用于多个列

def count(s):
    t = s.index.to_series().map(thresholds.get(s.name, {}))
    return (pd.crosstab(s.index, s.gt(t))
         .rename_axis(index=None, columns=None)
         .rename(columns={False: 'Values≤Thr', True: 'Values>Thr'})
      )

out = pd.concat({c: count(df[c]) for c in df})

注意。字典的键必须完全匹配。我更改了演示的大小写。

输出:

          Values≤Thr  Values>Thr
Column A           1           2
       B           0           3
       C           2           1

关于python - 如何根据不同的索引阈值过滤数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74213616/

相关文章:

python - 一个喜剧般简单的 python 程序上的 IRC 连接错误

python - 异常: error while installing jupyter on Ubuntu

python - 根据条件计算某个值在 pandas 数据框中出现的次数

python - Pandas 数据帧 : How to merge dataframe with multiple index and single index

python - corner.ravel()有什么作用?

python - 如何通过 MIMEMultipart 发送电子邮件正文部分

python - 使用有序字典解析 xml 文件

python - 求解变量子集的多元方程

python - 逐行求和,得到占总数 x % 的列

python - 将多个文件合并到一个数据框中