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

python - Pandas/Numpy-如何获取每列的计数并与之比较并写入CSV?-LMLPHP

我试图弄清楚女性中有多少“年龄” 55岁,男性中有多少“年龄” 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


我得到的结果与此类似:

python - Pandas/Numpy-如何获取每列的计数并与之比较并写入CSV?-LMLPHP

我正在寻找的结果与此类似:
python - Pandas/Numpy-如何获取每列的计数并与之比较并写入CSV?-LMLPHP

当第一个“ AGE”,“ NP”,“ GENDER”在一行上时(只是没有列名的计数);第二个“ AGE”,“ NP”,“ GENDER”位于下一行(只是没有列名的计数);第三个“ AGE”,“ NP”,“ GENDER”排在一行上(只是没有列名的计数)。

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

最佳答案

解决方法是创建一个由其他三个列值串联而成的列​​,然后对结果应用正则表达式查询。因此,您的“ 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)


您可以编写程序来动态创建此Regex,然后将其应用于多余的列,然后拉出导致regex匹配的行。

08-24 20:21