Pandas中,如何替换Series中的列表元素?

In Pandas, how to replace list elements in Series?

我有一个后续系列,想用 a 替换 a1,用 b 替换 b1,用 c 替换 c1 .

data = pd.Series([['a1', 'b1', 'c1'], ['b1', 'a1', 'c1'], ['c1', 'a1' ,'b1']])

Out[132]: 
0    [a1, b1, c1]
1    [b1, a1, c1]
2    [c1, a1, b1]
dtype: object

预期结果如下

0    [a, b, c]
1    [b, a, c]
2    [c, a, b]
dtype: object

下面的代码完成了我想做的事情,但它似乎不是一个好的方法。

for i, s in enumerate(data):
    temp = ['a' if x == 'a1' else x for x in s]
    temp = ['b' if x == 'b1' else x for x in temp]
    temp = ['c' if x == 'c1' else x for x in temp]
    data.iloc[i] = temp

有更好的方法吗?我假设 pandas 有一个内置函数。

我用 replace 试过了,但没有用。

data.replace['a1', 'a']
data.replace['b1', 'c']
data.replace['c1', 'c']

感谢您提前发表评论。

使用 get 创建用于替换和使用列表理解的字典 - 第二个参数 y 如果不存在则获取原始键:

d = {'a1':'a', 'b1':'b', 'c1':'c'}

data = data.apply(lambda x: [d.get(y,y) for y in x])
#alternative solution
#data = data.map(lambda x: [d.get(y,y) for y in x])
print (data)
0    [a, b, c]
1    [b, a, c]
2    [c, a, b]
dtype: object

或者:

data = pd.Series([[d.get(y,y) for y in x] for x in data], index=data.index)

如果性能不重要:

data = data.explode().replace(d).groupby(level=0).agg(list)
print (data)
0    [a, b, c]
1    [b, a, c]
2    [c, a, b]
dtype: object