如何使用对应字典重命名 pd.value_counts() 索引
How rename pd.value_counts() index with a correspondance dictionary
我正在对表示分类值的一列整数执行 value_counts()
。
我有一个将数字映射到与类别名称相对应的字符串的字典。
我想找到最好的 方法来获得具有相应名称的索引。因为我对我的 4 行解决方案不满意。
我目前的解决方案
df = pd.DataFrame({"weather": [1,2,1,3]})
df
>>>
weather
0 1
1 2
2 1
3 3
weather_correspondance_dict = {1:"sunny", 2:"rainy", 3:"cloudy"}
现在我是如何解决问题的:
df_vc = df.weather.value_counts()
index = df_vc.index.map(lambda x: weather_correspondance_dict[x] )
df_vc.index = index
df_vc
>>>
sunny 2
cloudy 1
rainy 1
dtype: int64
问题
我对那个非常乏味的解决方案不满意,你有针对这种情况的最佳实践吗?
这是一个更简单的解决方案:
weathers = ['sunny', 'rainy', 'cloudy']
weathers_dict = dict(enumerate(weathers, 1))
df_vc = df['weather'].value_counts()
df_vc.index = df_vc.index.map(weathers_dict.get)
说明
- 使用
dict
和 enumerate
构建一个将整数映射到天气类型列表的字典。
- 将
dict.get
与 pd.Index.map
结合使用。与 pd.Series.apply
不同,您不能直接传递字典,但可以传递一个可调用函数。
- 直接更新索引而不是使用中间变量。
或者,您可以在使用 pd.Series.value_counts
之前将地图应用到 weather
。这样,您就不需要更新结果的索引。
df['weather'] = df['weather'].map(weathers_dict)
df_vc = df['weather'].value_counts()
这是我的解决方案:
>>> weather_correspondance_dict = {1:"sunny", 2:"rainy", 3:"cloudy"}
>>> df["weather"].value_counts().rename(index=weather_correspondance_dict)
sunny 2
cloudy 1
rainy 1
Name: weather, dtype: int64
分类数据
您可以使用 Categorical Data with pd.CategoricalIndex.rename_categories
:
s = df['weather'].value_counts()
s.index = pd.Categorical(s.index).rename_categories(weather_correspondance_dict)
此功能在 Pandas v0.21+ 中可用。
我正在对表示分类值的一列整数执行 value_counts()
。
我有一个将数字映射到与类别名称相对应的字符串的字典。
我想找到最好的 方法来获得具有相应名称的索引。因为我对我的 4 行解决方案不满意。
我目前的解决方案
df = pd.DataFrame({"weather": [1,2,1,3]})
df
>>>
weather
0 1
1 2
2 1
3 3
weather_correspondance_dict = {1:"sunny", 2:"rainy", 3:"cloudy"}
现在我是如何解决问题的:
df_vc = df.weather.value_counts()
index = df_vc.index.map(lambda x: weather_correspondance_dict[x] )
df_vc.index = index
df_vc
>>>
sunny 2
cloudy 1
rainy 1
dtype: int64
问题
我对那个非常乏味的解决方案不满意,你有针对这种情况的最佳实践吗?
这是一个更简单的解决方案:
weathers = ['sunny', 'rainy', 'cloudy']
weathers_dict = dict(enumerate(weathers, 1))
df_vc = df['weather'].value_counts()
df_vc.index = df_vc.index.map(weathers_dict.get)
说明
- 使用
dict
和enumerate
构建一个将整数映射到天气类型列表的字典。 - 将
dict.get
与pd.Index.map
结合使用。与pd.Series.apply
不同,您不能直接传递字典,但可以传递一个可调用函数。 - 直接更新索引而不是使用中间变量。
或者,您可以在使用 pd.Series.value_counts
之前将地图应用到 weather
。这样,您就不需要更新结果的索引。
df['weather'] = df['weather'].map(weathers_dict)
df_vc = df['weather'].value_counts()
这是我的解决方案:
>>> weather_correspondance_dict = {1:"sunny", 2:"rainy", 3:"cloudy"}
>>> df["weather"].value_counts().rename(index=weather_correspondance_dict)
sunny 2
cloudy 1
rainy 1
Name: weather, dtype: int64
分类数据
您可以使用 Categorical Data with pd.CategoricalIndex.rename_categories
:
s = df['weather'].value_counts()
s.index = pd.Categorical(s.index).rename_categories(weather_correspondance_dict)
此功能在 Pandas v0.21+ 中可用。