我有一个像这样的数据框和字典:
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/