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中遗漏了一些步骤。请看编辑后的答案。再次感谢双方的澄清。