很抱歉措辞怪异,但我不知道如何更好地描述它。我会将我的问题翻译成美国术语以便于理解。我的问题是,我有一个包含州和地区的国家数据库,我只需要处理来自佛罗里达州的地区,所以我这样做:
df_fl=df.loc[df.state=='florida'].copy()
经过一些转换后,我想取佛罗里达州每个地区的平均值,所以我这样做:
df_final=df_fl.groupby(['district']).mean()
但这带来了数据库中每个地区的数据框。来自不在佛罗里达州的地区的所有行都充满了 nans。我想对此有一个简单的解决方案,但我一直找不到。它也是这样工作的,这有点违反直觉。
那么,你能帮我解决这个问题吗?
提前致谢
编辑: 我的数据是这样的:
District state Salary
1 Florida 1000
1 Florida 2000
2 Florida 2000
2 Florida 3000
3 California 3000
df_fl,那么,看起来像这样:
District state Salary
1 Florida 1000
1 Florida 2000
2 Florida 2000
2 Florida 3000
申请后
df_final=df_fl.groupby(['district']).mean()
我希望得到这个:
District Salary
1 1500
2 2500
但是我得到了这个:
District Salary
1 1500
2 2500
3 nan
显然是一个非常简化的版本,但核心仍然存在。
请您参考如下方法:
这是因为您的 'District' 列是分类类型。
MCVE
df = pd.DataFrame(dict(
State=list('CCCCFFFF'),
District=list('WXWXYYZZ'),
Value=range(1, 9)
))
没有分类
df.query('State == "F"').groupby('District').Value.mean()
District
Y 5.5
Z 7.5
Name: Value, dtype: float64
带有分类
df.assign(
District=pd.Categorical(df.District)
).query('State == "F"').groupby('District').Value.mean()
District
W NaN
X NaN
Y 5.5
Z 7.5
Name: Value, dtype: float64
解决方案
有很多方法可以做到这一点。保留分类类型的一种方法是使用方法 remove_unused_categories
df = df.assign(District=df.District.cat.remove_unused_categories())
