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

2024-06-16 14:18:32 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我目前困境的简化版本。你知道吗

以下是数据帧:

            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] 

如何在B列的单元格中添加1,其中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]

非常感谢。你知道吗


Tags: 数据版本列表dingdong困境
2条回答

你可以applylambda:

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]

这样做有效:

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]

相关问题 更多 >