将标签分配给pandas中的分组值

时间:2017-04-30 13:00:53

标签: pandas

我正在制作一些统计数据,这些统计数据要求教会对结果进行分组,并且只统计那些被访问过不止一次的教会。

所以我能做到:

df = pd.read_excel('/home/tim/metatron/church_data.xlsx')
chthresh = 1 # Minimum number of visits to a church in order to be considered

chgp = df.groupby('Church')

chcnt = pd.DataFrame(chgp['Date'].count())
chcnt2 = chcnt[chcnt['Date'] > chthresh]

给了我想要的东西:

In[8]: chcnt2
Out[8]: 
            Date
Church          
Manchester    36
Sale          29
Salford       33

为了分析的目的,我想对这些教堂进行匿名化并用(例如)A,B,C等替换它们(可能有三个以上的教堂)。分配某种字母标签的最简单/最好的方法是什么,例如:在这种情况下“曼彻斯特” - > “A”,“Sale” - > “B”,“Salford” - > “C”

我可以给教会一些序数值:

chcnt3 = chcnt2.reset_index()
chcnt3['Ordinal']=chcnt3.index.values

哪个产生

In[9]: chcnt3
Out[9]: 
       Church  Date  Ordinal
0  Manchester    36        0
1        Sale    29        1
2     Salford    33        2

但是我怎么把它转换成某种字母呢?有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以创建一个字母地图:

from string import ascii_uppercase
letter_map = dict(zip(range(len(ascii_uppercase)), ascii_uppercase))

并将其用于映射:

chcnt3['letter'] = chcnt3['Ordinal'].map(letter_map)

chcnt3
Out: 
       Church  Date  Ordinal letter
0  Manchester    36        0      A
1        Sale    29        1      B
2     Salford    33        2      C    

如果不创建序数列,您也可以在chcnt2 DataFrame上执行此操作:

chcnt2['letter'] = list(ascii_uppercase[:len(chcnt2)])

chcnt2
Out: 
            Date letter
Church                 
Manchester    36      A
Sale          29      B
Salford       33      C