【问题标题】:How to count characters across strings in a pandas column如何计算熊猫列中字符串的字符数
【发布时间】:2020-12-24 11:17:20
【问题描述】:

我有一个具有以下结构的数据框:

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 的示例:

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,我想要一个类似于以下的输出... A [6,4,2,2,1,1,2,1,1,1,0]
最后,我试图得到一个矩阵,每个字符都有一行。

                    [6,4,2,2,1,1,2,1,1,1,0]
                    [0,1,0,0,1,1,0,0,0,0,1]
                    [0,0,1,1,0,1,2,0,0,0,0]

【问题讨论】:

  • 你能澄清一下吗?从您的示例中我不明白您要实现的目标
  • 您的预期输出是什么。不清楚你在问什么?

标签: python python-3.x pandas sequencing


【解决方案1】:

以下应该有效。您可以根据您的确切需求(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')

【讨论】:

  • 您正在计算每个单元格的字符数。我想在整个 Pandas 列中按位置计数。我已经在上面澄清了我的问题。
  • 好的,我已经更新了我的答案。如果您需要更多关于结果的帮助,请告诉我。
  • 难以置信。这将如何推广而不是对 A-C 进行硬编码?我可以通过string = ''.join(set(df['prod_sec'].dropna().to_string(index = False))).strip() 获得所有可能性,但我不确定如何生成字典。
  • 你可以这样做:for i in df['prod_sec']: for k in i: d[k]=[0]*max_length
猜你喜欢
  • 2018-04-04
  • 1970-01-01
  • 2018-08-20
  • 2019-11-23
  • 2021-12-15
  • 1970-01-01
  • 2014-08-06
  • 2023-03-08
  • 2022-07-21
相关资源
最近更新 更多