首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算一个pandas数据帧中包含n个值的行数

计算一个pandas数据帧中包含n个值的行数
EN

Stack Overflow用户
提问于 2019-04-18 00:17:23
回答 2查看 97关注 0票数 0

我正在使用一个表,它的列中包含了对患者执行的过程,每一行代表一个患者。我需要做的是计算有多少患者接受了相同的程序组合。也就是说,在每一行中出现过程A,B或A,B,Z。顺序并不重要。

因此,假设这个示例表,我尝试以以下方式使用.isin()方法:

代码语言:javascript
复制
d = {'col1': ['A', 'A', 'B',], 'col2': ['B', 'D', 'C'], 'col3': ['C', '','X',]}
df = pd.DataFrame(data=d)
print(df)
  col1 col2 col3
0    A    B    C
1    A    D     
2    B    C    X

我想要得到一个列表,列出在给定两个过程的情况下每个过程执行的次数:

代码语言:javascript
复制
dx1 = ['A', 'B']
df[df.isin(dx1).any(1)].apply(pd.value_counts).sum(axis=1).sort_values(ascending=False)

但我得到了一个列表,列出了每个过程分别执行的次数,并将它们加在一起(而不是用" and“将"or”作为条件)。

代码语言:javascript
复制
C    2.0
H    1.0
D    1.0
A    1.0
     1.0
dtype: float64

我需要你提供一个列表,列出A和B以外的程序被执行的次数,在这种情况下它应该是:

代码语言:javascript
复制
C    1.0
dtype: float64

非常感谢您提前预估。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-18 00:46:16

既然你不关心顺序,集合应该可以解决你的问题:

代码语言:javascript
复制
d = {'col1': ['A', 'A', 'B',], 'col2': ['B', 'D', 'C'], 'col3': ['C', '','X',]}
df = pd.DataFrame(data=d)
dx1 = ['A', 'B']
df["procedures"] = df.apply(lambda x: [x.col1, x.col2, x.col3], axis=1)
df["contains_dx1"] = df.procedures.apply(lambda x: set(dx1).issubset(set(x)))
票数 0
EN

Stack Overflow用户

发布于 2019-04-18 00:52:32

使用functools.reducemeltisinvalue_counts尝试以下代码:

代码语言:javascript
复制
from functools import reduce
import pandas as pd
d = {'col1': ['A', 'A', 'B',], 'col2': ['B', 'D', 'C'], 'col3': ['C', '','X',]}
df = pd.DataFrame(data=d)
dx1 = ['A', 'B']
df_bool = reduce(lambda a,b: a | b, [df == i for i in dx1])
s = df[df_bool.sum(1).gt(1)].melt()['value'].value_counts()

s[~s.index.isin(dx1)]

输出:

代码语言:javascript
复制
C    1
Name: value, dtype: int64
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55732038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档