gpt4 book ai didi

python - 将值从 1 列映射到另一列(如果按 id 分组时存在)

转载 作者:行者123 更新时间:2023-12-01 00:46:05 34 4
gpt4 key购买 nike

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

s_id  h_id   h_val  h_others
1 600 5 {700,500}
1 700 12 {600,500,400}
1 500 6 {600,700}
2 ... ... ...

我想做的是,当按s_id分组时,迭代h_others,看看字典中的每个id是否在h_id中找到> 对于这个特定的s_id。如果找到,我想映射它的值,该值可以在 h_val 中找到,将它们相加,并使用 h_others 映射值的总和创建一个新列。如果没有找到,可以将id映射为0,这样就不会影响总和。

预期输出:

s_id  h_id   h_val  h_others       sum_h_others
1 600 5 {700,500} 18
1 700 12 {600,500,400} 11
1 500 6 {600,700} 17
2 ... ... ...

最佳答案

这是一种可能的方法:

import pandas as pd
import ast
from io import StringIO
df = pd.read_table(StringIO("""s_id h_id h_val h_others
1 600 5 {700,500}
1 700 12 {600,500,400}
1 500 6 {600,700}"""), sep='\s+')

summs = []
for s_id, s in list(zip(df.s_id, df.h_others.values)):
df['sum_h_others'] = 0
summ = 0
for d in ast.literal_eval(s):
try:
summ += sum(df.loc[df['s_id'] == s_id].loc[(df['h_id'] == d), 'h_val'].values)
except IndexError:
pass
summs.append(summ)
df['sum_h_others'] = summs

输出:

   s_id  h_id  h_val       h_others  sum_h_others
0 1 600 5 {700,500} 18
1 1 700 12 {600,500,400} 11
2 1 500 6 {600,700} 17

关于python - 将值从 1 列映射到另一列(如果按 id 分组时存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56974520/

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