Pandas / Numpy - 如何获取和比较每列与每列的计数并写入 csv?

Posted

技术标签:

【中文标题】Pandas / Numpy - 如何获取和比较每列与每列的计数并写入 csv?【英文标题】:Pandas / Numpy - How do I get and compare the counts of every column with every column and write to csv? 【发布时间】:2020-03-15 08:47:50 【问题描述】:

我试图弄清楚如何将每个数据框列的计数与每个数据框列的计数进行比较。可以有超过 300 列,因此会有超过 300 X 300 = 超过 90,000 次比较。这是一些示例数据:

我试图弄清楚有多少 'AGE' 55 是女性,有多少 'AGE' 48 是男性,有多少男性是 'NP' D,等等。

这是我使用的代码的一部分:

df_search1 = pd.read_csv("file1.txt",sep='\t', 
dtype=str,engine='c',header=0,encoding='latin-1')

items = ['AGE','NP','GENDER']

headr = True
for item1 in items:
    headr = True
    for item2 in items:
        # appends
        df_search1[(df_search1['%s'%item1].notnull()) & (df_search1['%s'%item2].notnull())] 
        [['%s'%item2]].count().to_csv('search_out.txt',header=headr,sep='\t',mode='a')
        headr = False

我得到的结果是这样的:

我正在寻找的结果与此类似:

第一个 'AGE'、'NP'、'GENDER' 在一行上(只是没有列名的计数);第二个'AGE','NP','GENDER'在下一行(只是没有列名的计数);第三个 'AGE'、'NP'、'GENDER' 在一行上(只是没有列名的计数)。

任何帮助将不胜感激。 谢谢

【问题讨论】:

【参考方案1】:

一种解决方法是创建一个列,其中填充连接其他三列值,然后应用正则表达式查询结果。所以你的行“55 D Female”将是“55DFemale”。

例如如果我们使用与您相同的输入表,则正则表达式将如下所示,前提是 concat 中的列顺序为 AGE+NP+GENDER

   Query                                  Regex
   1. how many 'AGE' 55 were Female    => (55)(.)(Female)
   2. how many 'AGE' 48 were male      => (48)(.)(Male)
   3. how many Male were 'NP' D        => ([0-9]2)(D)(Male)

您可以编写程序动态创建此正则表达式,然后应用到额外的列上,然后提取导致正则表达式匹配的行。

【讨论】:

以上是关于Pandas / Numpy - 如何获取和比较每列与每列的计数并写入 csv?的主要内容,如果未能解决你的问题,请参考以下文章

比较 pandas/numpy 中的 NaN 列

如何将 pandas 数据框列转换为本机 python 数据类型?

Pandas/Numpy NaN 无比较

pandas numpy处理缺失值,none与nan比较

用于 sklearn 管道的 pandas 到 numpy 数组

Pandas