Python 循环并累积由列表组成的列的总和

Python 循环并累积由列表组成的列的总和,python,pandas,Python,Pandas,目前,我的Pandas数据框如下所示 第X排 [“中”、“高”、“低”] [“中等”] 将函数映射到序列 import pandas as pd def function(x): summation = 0 for i in x: if "High" in i: summation += 10 elif "Medium" in i: summation +=

目前,我的Pandas数据框如下所示

第X排 [“中”、“高”、“低”] [“中等”]
将函数映射到序列

import pandas as pd

def function(x):
    summation = 0
    for i in x:
        if "High" in i:
            summation += 10
        elif "Medium" in i:
            summation += 5
        else:
            summation += 0
    return summation


df = pd.DataFrame({'raw_x': [['Medium', 'High', 'Low'], ['Medium']]})
df['row_y'] = df['raw_x'].map(function)
您可以使用以下命令以较短的格式执行此操作:

mapping = {'High': 10, 'Medium': 5, 'Low': 0}
df['raw_y'] = df['raw_x'].map(lambda x: sum([mapping[i] if i in mapping else 0 for i in x]))
我们可以做到:

mapper = {'Medium' : 5, 'High' : 10}

如果熊猫版本>0.25.0我们可以使用

df['Row_Y'] = df['Row_X'].explode().map(mapper).sum(level=0)


这个解决方案应该有效-

vals={“高”:10,“中”:5,“低”:0}
df['Row_Y']=df.apply(lambda Row:sum(vals[i]表示第['Row_X']行中的i),轴=1)

可能在更干净的一面,转换成
系列
并直接使用
地图

mapp = {'Medium' : 5, 'High' : 10}
df['Row_Y'] = df['Row_X'].apply(lambda x: pd.Series(x).map(mapp).sum())
df

            Row_X         Row_Y
0   [Medium, High, Low]   15.0
1   [Medium]              5.0

小心,
sum
是一个bult-in-functionGood调用,更改了示例。在处理pandas时,始终尝试避免重复数据帧。使用apply-instead歉意,添加for循环以反映我希望完成的累积求和。这会彻底改变映射吗?如果我在映射中为避免
键错误
添加好主意,added@ask39检查
df['ask']。应用(类型)。等式(列表)
如果得到错误,请告诉我们是的,这是最好的方法。使用map进行迭代和求和是最好的方法approach@JoeFerndz应用是一个循环并创建一个pd。每行中的系列都是无效的,在我看来,使用map和应用的其他解决方案更有效。我看到@ansev响应。这是一个很好的解决方案。良好的学习是最好的解决方法o我更喜欢使用explode/groupbyNow与
sum(level=0)
I忘了@Kenan
df['Row_Y'] = df['Row_X'].explode().map(mapper).sum(level=0)
print(df)

                 Row_X  Row_Y
0  [Medium, High, Low]     15
1             [Medium]      5
mapp = {'Medium' : 5, 'High' : 10}
df['Row_Y'] = df['Row_X'].apply(lambda x: pd.Series(x).map(mapp).sum())
df

            Row_X         Row_Y
0   [Medium, High, Low]   15.0
1   [Medium]              5.0