繁体   English   中英

计算 Pandas 中整个数据帧中特定字符串的数量,并将其值添加到新列中

[英]count number of a specific string in entire data frame in Pandas and add its value in a new column

我有一个 5 列数据框,我需要找出第一列 (A) 中的每个元素重复多少次,并将该元素前面的数量添加到新列 (F) 中,例如第一列中的“a” (A) 在整个数据框中重复了 5 次,因此需要创建 column() 并在第 0 行的相关单元格中添加 5,依此类推。 感谢您的支持。 我是 python 的新手,需要您的宝贵意见。

以下是原始数据框:

A   B   C   D   E
a   -            
b   a   -        
c   a   -        
d   b   a   -    
e   d   b   a   -

首选数据框是:

A   B   C   D   E   F
a   -               5
b   a   -           3
c   a   -           1
d   b   a   -       2
e   d   b   a   -   1

到目前为止,我已经在下面的行中进行了编码,但我无法创建具有总和的新列。

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'},
 'B': {0: '-', 1: 'a', 2: 'a', 3: 'b', 4: 'd'}})

df['C'] = np.where(df['B'].isin(df['A'].values), df['B'], np.nan)
df['C'] = df['C'].map(dict(zip(df.A.values, df.B.values)))
df['D'] = np.where(df['C'].isin(df['B'].values), df['C'], np.nan)
df['D'] = df['D'].map(dict(zip(df.B.values, df['C'].values)))
df['E'] = np.where(df['D'].isin(df['C'].values), df['D'], np.nan)
df['E'] = df['E'].map(dict(zip(df['C'].values, df['D'].values)))

for cell in df['A']:
    print(cell)
    m=df.eq(cell).sum()
#   pd.DataFrame([m.values], columns=m.index)
    dep=sum(m)
    print(dep)
print(df) 

以下是上述代码的输出:

a 5 b 3 c 1 d 2 e 1

A   B   C   D   E
a   -            
b   a   -        
c   a   -        
d   b   a   -    
e   d   b   a   -

您可以使用Counter创建一个映射字典,其中包含 dataframe 中的唯一元素作为其键并将它们的计数作为值,然后.mapA上的此字典:

from collections import Counter

df['F'] = df['A'].map(Counter(np.ravel(df)))

   A  B  C  D  E  F
0  a  -           5
1  b  a  -        3
2  c  a  -        1
3  d  b  a  -     2
4  e  d  b  a  -  1
df['F'] = [np.count_nonzero(df.values == x) for x in df['A']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM