我正在制作一些统计数据,这些统计数据要求教会对结果进行分组,并且只统计那些被访问过不止一次的教会。
所以我能做到:
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
但是我怎么把它转换成某种字母呢?有更好的方法吗?
答案 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