使用variab函数的Pandas

2024-10-06 08:46:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据帧:

  iata               airport              city state country        lat  \
0  00M              Thigpen        Bay Springs    MS     USA  31.953765   
1  00R  Livingston Municipal        Livingston    TX     USA  30.685861   
2  00V           Meadow Lake  Colorado Springs    CO     USA  38.945749   
3  01G          Perry-Warsaw             Perry    NY     USA  42.741347   
4  01J      Hilliard Airpark          Hilliard    FL     USA  30.688012 

我想知道每个州的机场数量。例如,如果我有以下函数:

^{pr2}$

其中state是州的缩写,例如“MA”。我试图按输入变量对dataframe进行分组,比如state('MA'),然后得到每个状态的机场数量。在

当我使用:

df.groupby(state)['airport'].value_counts()

或者

df.groupby(state)['airport'].value_counts()/df['airport'].count()


df.groupby(['state'] == state)['airport'].value_counts()/df['airport'].count()

最后两个是关于一个选定的机场将处于这种状态的条件概率。在

它抛出一个键错误:“MA”,我认为这是由于输入变量没有被识别为列,而是列中的一个值。在

有没有办法得到每个州的机场数量?在


Tags: df数量value状态stategroupbycounts机场
3条回答

假设每个记录在整个过程中都是一个机场,您只需计算每个州/国家组合的记录:

df.groupby(['country','state']).size()

可以将其重写为显式groupby apply:

In [11]: df.groupby("state")["airport"].apply(lambda x: x.value_counts() / len(x))
Out[11]:
state
CO     Meadow Lake             1.0
FL     Hilliard Airpark        1.0
MS     Thigpen                 1.0
NY     Perry-Warsaw            1.0
TX     Livingston Municipal    1.0
Name: airport, dtype: float64

或者存储groupby并重用它(这可能更快):

^{pr2}$

我会用Pandas的nunique来得到每个州的机场数量。代码更易于阅读和记忆。在

为了说明我的观点,我对数据集进行了如下修改,使佛罗里达州多了三个虚构的机场:

iata airport city state country lat 0 00M Thigpen Bay Springs MS USA 31.953765 1 00R Livingston Municipal Livingston TX USA 30.685861 2 00V Meadow Lake Springs CO USA 38.945749 3 01G Perry-Warsaw Perry NY USA 42.741347 4 01J Hilliard Airpark Hilliard FL USA 30.688012 5 f234 Weirdviller Chilliard FL USA 30.788012 6 23r2 Johnson Billiard FL USA 30.888012

然后,我们写下:

df.groupby('state').iata.nunique() 要获得以下结果:

state CO 1 MS 1 TX 1 FL 3 NY 1 Name: iata, dtype: int64

希望这有帮助。在

相关问题 更多 >