gpt4 book ai didi

python - 将函数应用于返回值基于其他行的 pandas Dataframe

转载 作者:太空狗 更新时间:2023-10-30 03:04:46 26 4
gpt4 key购买 nike

我有一个看起来像这样的数据框:

>>> import pandas
>>> df = pandas.DataFrame({'region' : ['east', 'west', 'south', 'west',
... 'east', 'west', 'east', 'west'],
... 'item' : ['one', 'one', 'two', 'three',
... 'two', 'two', 'one', 'three'],
... 'quantity' : [3,3,4,5,12,14,3,8], "price" : [50,50,12,35,10,10,12,12]})
>>> df
item price quantity region
0 one 50 3 east
1 one 50 3 west
2 two 12 4 south
3 three 35 5 west
4 two 10 12 east
5 two 10 14 west
6 one 12 3 east
7 three 12 8 west

我想做的是修改数量列中的值。每个新的数量值都是根据该行的项目和价格组合存在的不同区域的数量计算的。更具体地说,我想获取每个数量并将其乘以我编写的函数返回的区域权重,该函数获取一个区域和组成池的其他区域的列表:

region_weight(region, list_of_regions)。对于这种假想的情况,假设:

  • 东区值 1
  • 西部地区值(value) 2
  • 南值3

则east,west池中east的返回权重为0.3333333333333333(1/3)。池东、西、南中南的权重均为0.5(1/2)。

所以对于第一行,我们看看还有哪些其他行的商品一和价格 50。有 2 行是东区,1 行是西区。第一行中的新数量将是:3 * region_weight("east", ["east", "west"]) 或 3 * 0.3333333333333333。

我想对整个数量列应用相同的过程。除了逐行循环 Dataframe 之外,我不知道如何使用 pandas 库解决这个问题。

最佳答案

好的,我认为这可以满足您的需求:

制作一个区域权重字典:

In [1]: weights = {'east':1,'west':2,'south':3}

以下函数将 Series 中的值映射到权重字典中的值。 x是region的行值,w是映射到weights dict后的region系列。

In [2]: def f(x):
...: w = x.map(weights)
...: return w / w.sum().astype(float)

在这里,我们按 ['item','price'] 分组并应用上面的函数。输出是商品和价格的独特组合的一系列相对权重。

In [3]: df.groupby(['item','price']).region.apply(f)
Out[3]:
0 0.333333
1 0.666667
2 1.000000
3 1.000000
4 0.333333
5 0.666667
6 1.000000
7 1.000000

最后,您可以将 df.quantity 乘以上述系列来计算体重调整后的数量。

In [4]: df['wt_quant'] = df.groupby(['item','price']).region.apply(f) * df.quantity

In [5]: df
Out[5]:
item price quantity region wt_quant
0 one 50 3 east 1.000000
1 one 50 3 west 2.000000
2 two 12 4 south 4.000000
3 three 35 5 west 5.000000
4 two 10 12 east 4.000000
5 two 10 14 west 9.333333
6 one 12 3 east 3.000000
7 three 12 8 west 8.000000

关于python - 将函数应用于返回值基于其他行的 pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14429793/

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