Python 如何跨列中的字符串计数字符
我有一个具有以下结构的数据帧:Python 如何跨列中的字符串计数字符,python,python-3.x,pandas,sequencing,Python,Python 3.x,Pandas,Sequencing,我有一个具有以下结构的数据帧: prod_sec A AA AAAAAAAAAAB AAAABCCCAA AACC ABCCCBAC df = pd.DataFrame({'prod_sec': ['A','AA','AAAAAAAAAAB','AAAABCCCAA','AACC','ABCCCBAC']}) 每个字符串都是由字母组成的序列(本例中为a到C)。 我想为每个字母创建一个列表,统计整个熊猫栏中每个位置出现的次数。 例如,在第一个字符
prod_sec
A
AA
AAAAAAAAAAB
AAAABCCCAA
AACC
ABCCCBAC
df = pd.DataFrame({'prod_sec': ['A','AA','AAAAAAAAAAB','AAAABCCCAA','AACC','ABCCCBAC']})
每个字符串都是由字母组成的序列(本例中为a到C)。我想为每个字母创建一个列表,统计整个熊猫栏中每个位置出现的次数。
例如,在第一个字符串中,A仅在第一个位置/索引中,而不在其他位置
在第二个字符串中,A位于前两个位置,而不在其他位置
在第三个字符串中,A具有直到最后一个字符串的所有位置。等等
我需要一个按位置列出的列的总计数
以下是一个示例:
A -> [1,0,0,0,0,0,0,0,0,0,0]
AA [1,1,0,0,0,0,0,0,0,0,0]
AAAAAAAAAAB -> [1,1,1,1,1,1,1,1,1,1,0]
AAAABCCCAA [1,1,1,1,0,0,0,0,0,0,1]
AACC [1,1,0,0,0,0,0,0,0,0,0]
ABCCCBAC -> [1,0,0,0,0,0,1,0,0,0,0]
所以对于A,我想要一个类似以下的输出。。。[6,4,2,2,1,1,2,1,1,1,0]最后,我试图得到一个矩阵,每个字符有一行
以下几点应该行得通。您可以根据具体需要(numpy数组、数据帧、字典等)调整结果。如果你需要更多的帮助,告诉我
max_length=max([len(i) for i in df.prod_sec])
d={'A':[0]*max_length, 'B':[0]*max_length, 'C':[0]*max_length}
for i in df.prod_sec:
for k in range(len(i)):
d[i[k]][k]+=1
result=pd.DataFrame.from_dict(d, orient='index')
你能澄清一下吗?从你的例子中,我不明白你想要达到什么,你的预期输出是什么。不清楚你在问什么?你在计算每个单元格的字符数。我想在整个熊猫栏中按位置计数。我已经澄清了我上面的问题。好的,我已经更新了我的答案。如果你需要更多的帮助,告诉我结果。难以置信。如何将其通用化,而不是硬编码A-C?我可以通过
string=''.join(set(df['prod_sec'].dropna().to_string(index=False)).strip()
获得所有的可能性,但我不确定如何生成字典。您可以这样做:对于df中的I['prod_sec']:对于I中的k:d[k]=[0]*max\u length
max_length=max([len(i) for i in df.prod_sec])
d={'A':[0]*max_length, 'B':[0]*max_length, 'C':[0]*max_length}
for i in df.prod_sec:
for k in range(len(i)):
d[i[k]][k]+=1
result=pd.DataFrame.from_dict(d, orient='index')