Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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 从字典更新列中组的值_Python_Pandas_Dataframe_Dictionary_Pandas Groupby - Fatal编程技术网

Python 从字典更新列中组的值

Python 从字典更新列中组的值,python,pandas,dataframe,dictionary,pandas-groupby,Python,Pandas,Dataframe,Dictionary,Pandas Groupby,我知道如何使用字典中的相关键和值更新数据框的列,但从字典更新列中多个组的值的最佳方法是什么 因此,一种方法是执行groupby,然后从字典中相应的键中读取组值。但是,这对于我的数据集来说太长了,它有1400万行和125000个“匹配id” df=pd.数据帧({'match_id':['m1','m1','m1','m1','m2','m2','m2','m2','m2','m2','m2','m3','m3'], “姓名”:[“彼得”、“迈克”、“杰夫”、“约翰”、“亚历克斯”、“乔”、“杰

我知道如何使用字典中的相关键和值更新数据框的列,但从字典更新列中多个组的值的最佳方法是什么

因此,一种方法是执行groupby,然后从字典中相应的键中读取组值。但是,这对于我的数据集来说太长了,它有1400万行和125000个“匹配id”


df=pd.数据帧({'match_id':['m1','m1','m1','m1','m2','m2','m2','m2','m2','m2','m2','m3','m3'],
“姓名”:[“彼得”、“迈克”、“杰夫”、“约翰”、“亚历克斯”、“乔”、“杰夫”、“彼得”、“亚历克斯”、“李”、“乔”、“汤姆”、“迈克”、“约翰”、“汤姆”、“彼得”],
‘排名’:[4,3,1,2,5,6,2,4,3,1,5,6,1,3,2,4],
‘评级’:[1200、1300、1600、1550、1150、1540、1340、1300、1390、1290、1450、1650、1420、1490、1320、1410])
dict1={'m1':[5,4,1,2,6,3],'m2':[4,5,3,6,2,1],'m3':[2,1,4,3]}
df_new=pd.DataFrame()
grouped=df.groupby('match_id',sort=False)
对于id,分组中的dfg:
dfm=dfg.copy()
dfm['new_rank']=dict1[id]
df_new=pd.concat([df_new,dfm],sort=True)
这将创建一个新列“new_rank”,其中的值从dict1中为每个匹配_id提取

我还尝试了映射功能,但由于它不适用于组,因此它只是在每行上粘贴每个匹配id的整个值列表

有什么有效的方法可以做到这一点吗

另一方面,这是我编写字典的方式,字典根据“评级”列中的数字顺序计算新等级(如果你也能想出更好的方法来处理整个问题,请让我知道):

dict1={}
grouped=df.groupby('match_id',sort=False)
对于id,分组中的dfg:
dfm=dfg.copy()
dict1[id]=[len(dfm['rating'])-(排序(dfm['rating'],反向=False)。dfm['rating']中x的索引(x))

我之所以要查字典的逻辑,是因为我们可以马上解决这个问题。你只需要:

输出

   match_id   name  rank  rating  new_rank
0        m1  peter     4    1200         5
1        m1   mike     3    1300         4
2        m1   jeff     1    1600         1
3        m1   john     2    1550         2
4        m1   alex     5    1150         6
5        m1    joe     6    1540         3
6        m2   jeff     2    1340         4
7        m2  peter     4    1300         5
8        m2   alex     3    1390         3
9        m2     li     1    1290         6
10       m2    joe     5    1450         2
11       m2    tom     6    1650         1
12       m3   mike     1    1420         2
13       m3   john     3    1490         1
14       m3    tom     2    1320         4
15       m3  peter     4    1410         3

你创建的词典的逻辑是什么?你能不能解释一下,而不是仅仅显示代码。这是我代码的另一部分,但可以放弃,因为这部分工作完美,速度非常快!谢谢不客气,请快速阅读。它可以帮助你提出正确的问题。
   match_id   name  rank  rating  new_rank
0        m1  peter     4    1200         5
1        m1   mike     3    1300         4
2        m1   jeff     1    1600         1
3        m1   john     2    1550         2
4        m1   alex     5    1150         6
5        m1    joe     6    1540         3
6        m2   jeff     2    1340         4
7        m2  peter     4    1300         5
8        m2   alex     3    1390         3
9        m2     li     1    1290         6
10       m2    joe     5    1450         2
11       m2    tom     6    1650         1
12       m3   mike     1    1420         2
13       m3   john     3    1490         1
14       m3    tom     2    1320         4
15       m3  peter     4    1410         3