我试图弄清楚如何比较每个数据帧列与每个数据帧列的计数。可能有超过300列,因此会有超过300 X 300 =超过90,000个比较。这是一些示例数据:
我试图弄清楚女性中有多少“年龄” 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
我得到的结果与此类似:
我正在寻找的结果与此类似:
当第一个“ 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匹配的行。