首页 > 解决方案 > 如何根据应用于另一列的条件设置 Pandas DataFrames 列值

问题描述

我有一个数据框,我想向其中添加另一列,这取决于基于该特定单元格中其他列的值。

我不断得到TypeError: string indices must be integers, not str

这是我的数据框:df,其中所有列的值都是字符串格式

ID      Key
_1      A
_2       B, C
_3       A
_4       D, E
_5       B, C 

我的预期输出是

ID      Key      Name
_1       A        n0, n1
_2       B, C     n2
_3       A        n3
_4       D, E     n4
_5       B, C     n5, n6

这是我所做的:

df[df['ID'].str.contains('1')]['Name'] = 'n0, n1' that gave me Type Error.

请注意,id 匹配是有意的子字符串匹配。

尝试使用numpy where,但这也给了我同样的错误。我跟着这个链接

根据列值的子集设置新列值的正确方法是什么。此外,我稍后会涵盖所有值,其中我为每个ID(这里从 1 到 5)执行此操作。

标签: pythonpandas

解决方案


以下对我有用:

df.loc[df['ID'].str.contains('1'), 'Name'] = 'n0, n1'

基本上你需要使用 .loc[row_index, col_index] = val 来修改现有的数据框。

使用 df[row_index][col_index] 只会创建我相信的值的副本。

这也假设您已经定义了该列:

df['Name'] = pd.Series()

推荐阅读