gpt4 book ai didi

python - 通过另一个数据框中的匹配索引划分数据框列

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:03 24 4
gpt4 key购买 nike

我有一个这样的数据框:

        id1     name    id2   val 
0 1 'A' 1 4
1 1 'B' 1 1
2 2 'C' 3 1
.
.
.

我有另一个数据框如下:

              new_val 
1 2
3 4

我想制作第一个数据框如下:

        id1     name    id2   val 
0 1 'A' 1 2.0
1 1 'B' 1 0.5
2 2 'C' 3 0.25
.
.
.

我想要做的是将第一个数据框中的 val 列除以与 id2 列索引匹配的值。我们看到 id2 = 1 然后我们将 val = 4 除以 2,因为它对应于索引 1。id2 = 3 然后我们将 val = 1 除以 4 得到 0.25。

我知道我可以将它们添加到元组列表中并执行计算并重置该列,但这可以用 pandas 函数实现吗?对非常大的数据集使用 for 循环在计算上确实非常昂贵。

最佳答案

嗯,这种方式的空间效率可能较低,但它应该比循环更快:

>>> df1
id1 name id2 val
0 1 'A' 1 4
1 1 'B' 1 1
2 2 'C' 3 1
>>> df2 = pd.DataFrame([2,4], index=[1,3])
>>> df2
0
1 2
3 4

所以,从设置索引开始:

>>> df1.set_index('id2', inplace=True)

然后,使用我认为正确索引的 df2:

>>> df1['divisor'] = df2
>>> df1
id1 name val divisor
id2
1 1 'A' 4 2
1 1 'B' 1 2
3 2 'C' 1 4
>>> df1.val / df1.divisor
id2
1 2.00
1 0.50
3 0.25
dtype: float64

最后,为了完整起见:

>>> df1['val'] = df1.val / df1.divisor
>>> df1
id1 name val divisor
id2
1 1 'A' 2.00 2
1 1 'B' 0.50 2
3 2 'C' 0.25 4
>>> df1.drop('divisor',inplace=True, axis=1)
>>> df1
id1 name val
id2
1 1 'A' 2.00
1 1 'B' 0.50
3 2 'C' 0.25

关于python - 通过另一个数据框中的匹配索引划分数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41709239/

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