首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:用频率计数替换变量

问:用频率计数替换变量
EN

Stack Overflow用户
提问于 2016-04-04 09:02:23
回答 1查看 2.2K关注 0票数 1

我有一个dataframe,它有数百个不同值的分类变量。

我能够使用使用groupby语句+ reset_index()的'values_count()‘函数来验证这些级别的频率。

我试图用它们的频率计数来替换这数百个值(然后在合并级别上用低基数替换)。我试图加入两种不同的数据格式(一种是值,另一种是计数),但我有问题.

例如,频率表如下,大约有300条记录(所有记录都是唯一的):

代码语言:javascript
复制
    v_catego  Time
0        AA   353
1       AAC   136
2       ABB     2
3       ABC     1
4       ACA    13

300     ZZZ    33

原始数据:

代码语言:javascript
复制
           V_vatego
    0        AA 
    1       AAC   
    2       ABB     
    3       AAC     
    4       DA  
    5       AAC
................

其中,我希望用每个实例的“Time”值替换(或添加另一个)变量:

代码语言:javascript
复制
    v_catego  new_v_catego
0        AA   353
1       AAC   136
2       ABB     2
3       AA    353
4       AAC   136
.................

我知道在R中有一个简单的函数。巨蟒中有类似的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 09:23:46

您可以使用concat,但在必须通过add_categories在两个Series (列)中设置相同的类别之前

代码语言:javascript
复制
print df
  v_catego  Time
0       AA   353
1      AAC   136
2      ABB     2
3       AA   353
4      AAC   136

print df1
  v_catego  Time
0      ABC     1
1      ACA    13

#remember old cat in df1
old_cat = df1['v_catego']

#set same categories in both dataframes in column v_catego
df1['v_catego'] = df['v_catego'].cat.add_categories(df1['v_catego'])
df['v_catego'] = df['v_catego'].cat.add_categories(old_cat)
print df.v_catego
0     AA
1    AAC
2    ABB
3     AA
4    AAC
Name: v_catego, dtype: category
Categories (5, object): [AA, AAC, ABB, ABC, ACA]

print df1.v_catego
0     AA
1    AAC
Name: v_catego, dtype: category
Categories (5, object): [AA, AAC, ABB, ABC, ACA]
代码语言:javascript
复制
print pd.concat([df,df1])
  v_catego  Time
0       AA   353
1      AAC   136
2      ABB     2
3       AA   353
4      AAC   136
0       AA     1
1      AAC    13

编辑:

我想你可以用merge

代码语言:javascript
复制
print df
   v_catego
0        AA
1       AAC
2       ABB
3        AA
4       AAC
5       ABB
6        AA
7       AAC
8        AA
9       AAC
10      AAC
11      ABB
12       AA
13      AAC
14      ABB
15       AA
16      AAC
17       AA
18      AAC
代码语言:javascript
复制
df1 = df['v_catego'].value_counts()
                    .reset_index(name='count')
                    .rename(columns={'index': 'v_catego'})
print df1
  v_catego  count
0      AAC      8
1       AA      7
2      ABB      4

print pd.merge(df,df1,on=['v_catego'], how='left' )
   v_catego  count
0        AA      7
1       AAC      8
2       ABB      4
3        AA      7
4       AAC      8
5       ABB      4
6        AA      7
7       AAC      8
8        AA      7
9       AAC      8
10      AAC      8
11      ABB      4
12       AA      7
13      AAC      8
14      ABB      4
15       AA      7
16      AAC      8
17       AA      7
18      AAC      8
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36398417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档