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。除非这个国家只有一家运营商,否则它们都应该是浮动的。我不能用你提供的数据来解释。请看一看。