Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 嵌套数据帧分配_Python 2.7_Pandas_Dataframe - Fatal编程技术网

Python 2.7 嵌套数据帧分配

Python 2.7 嵌套数据帧分配,python-2.7,pandas,dataframe,Python 2.7,Pandas,Dataframe,我有以下数据帧: prefix operator_name country_name mno_subscribers 0 267.0 Airtel Botswana 490 1 373.0 Orange Moldova 207 2 248.0 Airtel Seychelles 490 3 91.0 Reliance Bostwana

我有以下数据帧:

    prefix  operator_name   country_name    mno_subscribers 
0   267.0   Airtel          Botswana        490
1   373.0   Orange          Moldova         207
2   248.0   Airtel          Seychelles      490
3   91.0    Reliance        Bostwana        92
4   233.0   Vodafone        Bostwana        516
我正在努力做到这一点:

    prefix  operator_name   country_name    mno_subscribers  operator_proba 
0   267.0   Airtel          Botswana        490              0.045
1   373.0   Orange          Moldova         207              0.004
2   248.0   Airtel          Seychelles      490              0.135
3   91.0    Reliance        India           92               0.945
4   233.0   Vodafone        Ghana           516              0.002
为此:

countries = df["country_name"].unique()
df["operator_proba"] = 0

for country in countries:
    country_name = df[df["country_name"] == country]

    for operator in country:
        mno_sum = country_name["mno_subscribers"].sum()
        df["operator_proba"]["country_name"] = country_name["mno_subscribers"] / mno_sum
在将
操作符\u proba
分配给原始数据帧时,我哪里出错了?

此行

    df["operator_proba"]["country_name"] = country_name["mno_subscribers"] / mno_sum
无法真正工作,因为
df[“operator_proba”]
是一列(或系列);你不能在上面使用
[“country\u name”]
索引。 这可能就是为什么事情不适合你

目前还不完全清楚您想要实现什么,但我想这可能会奏效:

df['operator_proba'] = df.groupby('country_name')['mno_subscribers'].apply(lambda x : x/x.sum())
这为您节省了一个双循环,并且更符合熊猫风格(可能有更好的计算方法)。结果是:

   prefix operator_name country_name  mno_subscribers  operator_proba
0   267.0        Airtel     Botswana              490        1.000000
1   373.0        Orange      Moldova              207        1.000000
2   248.0        Airtel   Seychelles              490        1.000000
3    91.0      Reliance     Bostwana               92        0.151316
4   233.0      Vodafone     Bostwana              516        0.848684

在有限的数据集(以及博茨瓦纳/博斯特瓦纳差异)下,大多数“概率”为1。

第二个
循环
对于国内运营商
做什么?你能让这个例子重现吗?不清楚如何从您提供的数据中得出
运算符\u proba
。每个国家都有重复的运算符。概率对于每个国家的运营商来说应该是唯一的。求和到一,猜猜看。
df['operator\u proba']=df.groupby(['country\u name','operator\u name']).mno\u subscribers.transform(lambda x:x/x.sum())
是否适合您?是的,它运行,但每条记录都是1.0。除非这个国家只有一家运营商,否则它们都应该是浮动的。我不能用你提供的数据来解释。请看一看。