python 如何找出哪些项目出现在95%的列中?

zaqlnxep  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(111)

我有一个数据表,其中有20个唯一的列,每个列中有一个表中的项目。
我想找到出现在95-100%的列中的项目类型。因此,我想找到出现在19/20项目中的项目,但这与列的组合无关。只要项目出现在19/20项目中,我就希望它被列出。
我在这里太茫然了,我几乎没有经验,但精通Python和R的导航。
我想在python中尝试sort & list,但是它只告诉我100%列中存在的项。
如果我在我的数据框上使用dput(df),我会得到以下结果(我只列出了2/19列)

#> dput(df)
structure(list(RSTM = c("hslU", "hslV", "coaA", "pckA", "divL", 
"tsaE", "group_1759", "addA", "group_2373", "fpgS", "accD", "coaE", 
"dnaQ", "secB", "group_1964", "gyrB_2", "maf", "hemE", "group_1532", 
"rho", "mnmE", "mnmG", "rsmG", "parA", "parB", "group_1348", 
"group_2377", "leuS", "group_2378", "group_2379", "ftsK", "lolA", 
"group_1017", "rnhA", "thrB", "trpS", "murJ_1", "group_1289", 
"xseA", "group_2420", "rimP", "nusA", "infB", "rbfA", "rpsO", 
...
-1136L), class = "data.frame")
3bygqnnd

3bygqnnd1#

假设您使用Pandas数据框来保存数据,则可以获得一组唯一值,然后对它们进行迭代以确定它们在每列中的占用情况。

import pandas as pd

df = pd.read_csv('path/to/file.csv')

def in_col_fraction(df, value):
    in_cols = [(value in df[c]) for c in df]
    return sum(in_cols) / len(in_cols)

# this holds the column presence of all items in your data
presence_dict = {
    value: in_col_fraction(df, value)
    for value in df.stack().unique()
}

# this is the list of just the items that have 95% occupancy or higher
over_95_list = [v for v in df.stack().unique() if (in_col_fraction(df, v) >= 0.95)]
roqulrg3

roqulrg32#

这是一个R解决方案,它使用了一个有四列的示例 Dataframe ,并且找到了至少75%的列中出现的值。

all_vals <- unique(unlist(dat))

pct_w_val <- sapply(
  all_vals, 
  \(val) mean(sapply(dat, \(col) val %in% col))
)

all_vals[pct_w_val >= .75]
# [1] "x" "e" "p" "v" "s" "q" "o" "w" "n"
  • 示例数据:*

x一个一个一个一个x一个一个二个x

相关问题