Pandas groupby使用函数变量

时间:2017-11-02 21:28:41

标签: python pandas

我有这个数据框:

  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 

我想获得每个州的机场数量。例如,如果我有这个功能:

f(dataframe, state):
    result reuslt

州是州的缩写,例如'MA'。我试图通过输入变量对数据帧进行分组,例如状态('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',我认为是由于输入变量未被识别为列,而是列中的值。

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

4 个答案:

答案 0 :(得分:1)

假设每条记录都是机场,您只需计算每个州/国家/地区组合的记录:

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

答案 1 :(得分:1)

我会使用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

希望这有帮助。

答案 2 :(得分:0)

您可以将此作为显式组重写:

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并重复使用它(可能这更快):

In [21]: g = df.groupby("state")["airport"]

In [22]: g.value_counts() / g.size()
Out[22]:
state  airport
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

答案 3 :(得分:0)

这似乎按照我的意图在你的帮助下运作。 a[state]表示状态缩写('MA')形式的输入。这将返回属于该州的随机选择机场的概率。

a = df.groupby('state').iata.nunique()
s = a.sum()
result = a[state]/s
return result
相关问题