gpt4 book ai didi

python - pandas 中的总和值(如果它们按层次顺序排列)

转载 作者:行者123 更新时间:2023-11-28 17:16:05 25 4
gpt4 key购买 nike

我有一个包含 keys=parents 和 values=children 的字典:

dictionary = {'100': '120', '200': '149', '760': '800', '800': '790', '150': '700', '59': '80'}

和一个 Pandas 数据框

nodes   figures     numbers
100 triangle 0.8
120 triangle 0.2
200 square 0.3
149 square 0.2
59 square 0.9
760 circle 0.13
800 circle 0.13
790 circle 0.13
150 circle 0.13

对于图中的每个项目,对于每个节点,如果任何节点是另一个节点的父节点,我想分配数字值的总和,如下所示

nodes   figures     numbers
100 triangle 1
120 triangle 0.2
200 square 0.5
149 square 0.2
59 square 0.9
760 circle 0.39
800 circle 0.26
790 circle 0.13
150 circle 0.13

我试过了 out = groupby(["数字"])['数字'].sum()

但它没有返回正确的输出

figures     numbers
triangle 1
square 1.4
circle 0.52

最佳答案

您可以使用一个函数来执行此操作,该函数遍历数据框中的每一行并递归搜索子行,同时添加值。

def get_children_values(row):
if str(row.nodes) in dictionary: # searches for a child row
child = df[(df.figures == row.figures) & (df.nodes.astype(str) == dictionary[str(row.nodes)])]
if not child.empty: # if a child row is found, add its numbers value
return row.numbers + get_children_values(child.iloc[0])
return row.numbers # if no child is found just return the numbers value for this row

让我们将此输出分配给一个新列以进行比较:

df['new_numbers'] = df.apply(get_children_values, axis = 1)

print(df)

nodes figures numbers new_numbers
0 100 triangle 0.80 1.00
1 120 triangle 0.20 0.20
2 200 square 0.30 0.50
3 149 square 0.20 0.20
4 59 square 0.90 0.90
5 760 circle 0.13 0.39
6 800 circle 0.13 0.26
7 790 circle 0.13 0.13
8 150 circle 0.13 0.13

这应该适用于任何深度的树,但是如果你的树中有循环,这将失败并出现递归深度错误。

关于python - pandas 中的总和值(如果它们按层次顺序排列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098151/

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