Python 当列是一系列列表时,如何有条件地向dataframe列中的单元格选择添加?

Python 当列是一系列列表时,如何有条件地向dataframe列中的单元格选择添加?,python,list,pandas,Python,List,Pandas,以下是我目前困境的简化版本 以下是数据帧: x y A B 0 ding ding [0, 1] [0, 0] 1 ding dong [0, 1] [0, 0] 2 ding ding [0, 1] [0, 0] 3 ding ding [0, 1] [0, 0] 4 ding

以下是我目前困境的简化版本

以下是数据帧:

            x      y       A       B 
0           ding   ding    [0, 1]  [0, 0] 
1           ding   dong    [0, 1]  [0, 0] 
2           ding   ding    [0, 1]  [0, 0] 
3           ding   ding    [0, 1]  [0, 0] 
4           ding   dong    [0, 1]  [0, 0] 
5           ding   ding    [0, 1]  [0, 0] 
6           ding   ding    [0, 1]  [0, 0] 
如何将1添加到B列中x!=Y单元格为列表,1应插入索引1

结果表如下所示:

            x      y       A       B 
0           ding   ding    [0, 1]  [0, 0] 
1           ding   dong    [0, 1]  [0, 1] 
2           ding   ding    [0, 1]  [0, 0] 
3           ding   ding    [0, 1]  [0, 0] 
4           ding   dong    [0, 1]  [0, 1] 
5           ding   ding    [0, 1]  [0, 0] 
6           ding   ding    [0, 1]  [0, 0]
非常感谢。

此功能:

def last_one(lst):
    lst[1] = 1

df[df.x != df.y].B.apply(last_one)
df
之前:

      x     y       A       B
0  ding  ding  [0, 1]  [0, 0]
1  ding  dong  [0, 1]  [0, 0]
2  ding  ding  [0, 1]  [0, 0]
3  ding  ding  [0, 1]  [0, 0]
4  ding  dong  [0, 1]  [0, 0]
5  ding  ding  [0, 1]  [0, 0]
6  ding  ding  [0, 1]  [0, 0]
df
之后:

      x     y       A       B
0  ding  ding  [0, 1]  [0, 0]
1  ding  dong  [0, 1]  [0, 1]
2  ding  ding  [0, 1]  [0, 0]
3  ding  ding  [0, 1]  [0, 0]
4  ding  dong  [0, 1]  [0, 1]
5  ding  ding  [0, 1]  [0, 0]
6  ding  ding  [0, 1]  [0, 0]

您可以
应用
lambda:

df[df.x != df.y].B.apply(lambda x: x[:-1] + [1])
例如:

In [283]: df
Out[283]:
      x     y       A       B
0  ding  ding  [0, 1]  [0, 0]
1  ding  dong  [0, 1]  [0, 0]
2  ding  ding  [0, 1]  [0, 0]
3  ding  ding  [0, 1]  [0, 0]
4  ding  dong  [0, 1]  [0, 0]
5  ding  ding  [0, 1]  [0, 0]
6  ding  ding  [0, 1]  [0, 0]

mask = df.x != df.y
df.B[mask] = df.B[mask].apply(lambda x: x[:-1] + [1])

In [289]: df
Out[289]:
      x     y       A       B
0  ding  ding  [0, 1]  [0, 0]
1  ding  dong  [0, 1]  [0, 1]
2  ding  ding  [0, 1]  [0, 0]
3  ding  ding  [0, 1]  [0, 0]
4  ding  dong  [0, 1]  [0, 1]
5  ding  ding  [0, 1]  [0, 0]
6  ding  ding  [0, 1]  [0, 0]

您的
B
列的类型是什么?它是一个
列表
还是
str
?它们属于listYes类型,非常有效。我一直在想,可以使用嵌套的选择方法来实现,我忘记了传递一个函数来应用它!我开始意识到这可以通过几种不同的方式来实现。使用lambda还为我保存了一个函数定义!请注意,
lambda
函数返回一个新列表,而不是(按照OP的要求)插入到现有列表中。如果在其他地方使用相同的列表,这可能会产生影响。@orgelzyklus我意识到我在控制台中执行的asnwer中遗漏了一些步骤。请看编辑后的答案。再次感谢双方的澄清。