gpt4 book ai didi

python - pandas - 从多索引列获取值

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:27 25 4
gpt4 key购买 nike

我有以下数据框 df:

H,Nu,City,Code,Code2
0.965392,15,Madrid,es,es
0.920614,15,Madrid,it,es
0.726219,16,Madrid,tn,es
0.739119,17,Madrid,fr,es
0.789923,55,Dublin,mt,en
0.699239,57,Dublin,en,en
0.890462,68,Dublin,ar,en
0.746863,68,Dublin,pt,en
0.789923,55,Milano,it,it
0.699239,57,Milano,es,it
0.890462,68,Milano,ar,it
0.746863,68,Milano,pt,it

我想为每个 City 添加一个新列 HCode,其中 H 值对应于 CodeCode2 字符串映射,以便生成的数据帧显示为:

H,Nu,City,Code,Code2,HCode
0.965392,15,Madrid,es,es,0.965392
0.920614,15,Madrid,it,es,0.965392
0.726219,16,Madrid,tn,es,0.965392
0.739119,17,Madrid,fr,es,0.965392
0.789923,55,Dublin,mt,en,0.699239
0.699239,57,Dublin,en,en,0.699239
0.890462,68,Dublin,ar,en,0.699239
0.746863,68,Dublin,pt,en,0.699239
0.789923,55,Milano,it,it,0.789923
0.699239,57,Milano,es,it,0.789923
0.890462,68,Milano,ar,it,0.789923
0.746863,68,Milano,pt,it,0.789923

到目前为止,我尝试按 City 和 Code2 进行分组,但没有结果。

最佳答案

您可以对“City”和“Code2”进行groupby,对此调用first并重置索引,结果如下:

In [172]:
gp = df.groupby(['City','Code2'])['H'].first().reset_index()
gp

Out[172]:
City Code2 H
0 Dublin en 0.789923
1 Madrid es 0.965392
2 Milano it 0.789923

然后对原始 df 执行左合并并选择“H_y”列,该名称来自于列冲突的事实和 ffill这个:

In [173]:
df['HCode'] = df.merge(gp, left_on=['City', 'Code'], right_on=['City', 'Code2'], how='left')['H_y'].ffill()
df

Out[173]:
H Nu City Code Code2 HCode
0 0.965392 15 Madrid es es 0.965392
1 0.920614 15 Madrid it es 0.965392
2 0.726219 16 Madrid tn es 0.965392
3 0.739119 17 Madrid fr es 0.965392
4 0.789923 55 Dublin mt en 0.965392
5 0.699239 57 Dublin en en 0.789923
6 0.890462 68 Dublin ar en 0.789923
7 0.746863 68 Dublin pt en 0.789923
8 0.789923 55 Milano it it 0.789923
9 0.699239 57 Milano es it 0.789923
10 0.890462 68 Milano ar it 0.789923
11 0.746863 68 Milano pt it 0.789923

merge 的结果显示它产生的内容:

In [165]:
df.merge(gp, left_on=['City', 'Code'], right_on=['City', 'Code2'])['H_y']

Out[165]:
0 0.965392
1 0.789923
2 0.789923
Name: H_y, dtype: float64

编辑

好的,IIUC 您可以像以前一样分组,但然后过滤“Code2”等于“Code”的组,然后使用它进行合并:

In [200]:
gp = df.groupby('City')
mask = gp.apply(lambda x: x['Code2'] == x['Code'])
lookup = df.loc[mask[mask].reset_index(level=0).index]
lookup

Out[200]:
H Nu City Code Code2
5 0.699239 57 Dublin en en
0 0.965392 15 Madrid es es
8 0.789923 55 Milano it it

In [202]:
df['HCode'] = df.merge(lookup, left_on=['City', 'Code'], right_on=['City', 'Code2'], how='left')['H_y'].ffill()
df

Out[202]:
H Nu City Code Code2 HCode
0 0.965392 15 Madrid es es 0.965392
1 0.920614 15 Madrid it es 0.965392
2 0.726219 16 Madrid tn es 0.965392
3 0.739119 17 Madrid fr es 0.965392
4 0.789923 55 Dublin mt en 0.965392
5 0.699239 57 Dublin en en 0.699239
6 0.890462 68 Dublin ar en 0.699239
7 0.746863 68 Dublin pt en 0.699239
8 0.789923 55 Milano it it 0.789923
9 0.699239 57 Milano es it 0.789923
10 0.890462 68 Milano ar it 0.789923
11 0.746863 68 Milano pt it 0.789923

关于python - pandas - 从多索引列获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com