簡體   English   中英

計算pandas數據幀中包含n個值的行數

[英]Calculate the number of rows containing n values in a pandas dataframe

我正在使用一個表格,其中列出了對患者執行的程序,每行代表一名患者。 我需要做的是計算有多少患者接受相同的手術組合。 也就是說,在每一行中出現過程[A,B]或[A,B,Z]。 訂單無關緊要。

所以假設這個示例表,我嘗試以下列方式使用.isin()方法:

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

我想得到一個列表,給出兩個程序,每個程序執行多少次:

dx1 = ['A', 'B']
df[df.isin(dx1).any(1)].apply(pd.value_counts).sum(axis=1).sort_values(ascending=False)

但是我得到了一個列表,列出每個程序分別執行多少次,並將它們加在一起(而不是“和”將“或”作為條件)

C    2.0
H    1.0
D    1.0
A    1.0
     1.0
dtype: float64

我需要的是提供一個除A和B以外的程序執行次數的列表,在這種情況下它應該是:

C    1.0
dtype: float64

非常感謝你提前估計。

由於您不關心訂單,因此套裝應解決您的問題:

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)))

使用functools.reducemeltisinvalue_counts :from來嘗試這段代碼

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)]

輸出:

C    1
Name: value, dtype: int64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM