根据其他列中的值在 python 3 (pandas) 数据框中创建新列

Posted

技术标签:

【中文标题】根据其他列中的值在 python 3 (pandas) 数据框中创建新列【英文标题】:Create new column in python 3 (pandas) dataframe based on value in other column 【发布时间】:2020-12-05 13:50:06 【问题描述】:

我有一个 pandas 数据框,我需要根据数据框中其他列的值创建新列。这是数据框

人城市州国家

美国伊利诺伊州芝加哥

B 美国亚利桑那州凤凰城

C 美国加利福尼亚州圣地亚哥

我想根据 state 中的值创建两个新列

    创建新列 df["city-north"] = df['city'] where state = "Illinois" 创建新列 df["city-south"] = df['city'] 其中 state 不等于“Illinois”

我试过了

df.loc[((df['state'] == 'Illinois')), 'city-north'] = df['city']

df.loc[((df['state'] != 'Illinois')), 'city-south'] = df['city']

但不等于条件的第二行代码不会创建“city-south”列。请帮忙

【问题讨论】:

【参考方案1】:

对我来说工作得很好,如果没有创建匹配条件缺失值:

df.loc[df['state'] == 'Illinois', 'city-north'] = df['city']
df.loc[df['state'] != 'Illinois', 'city-south'] = df['city']

print (df)
  person       city       state country city-north city-south
0      A    Chicago    Illinois     USA    Chicago        NaN
1      B    Phoenix     Arizona     USA        NaN    Phoenix
2      C  San Diego  California     USA        NaN  San Diego

如果不匹配的行需要空值字符串:

df['city-north'] = np.where(df['state'] == 'Illinois', df['city'], '')
df['city-south'] = np.where(df['state'] != 'Illinois', df['city'], '')

print (df)
  person       city       state country city-north city-south
0      A    Chicago    Illinois     USA    Chicago           
1      B    Phoenix     Arizona     USA               Phoenix
2      C  San Diego  California     USA             San Diego

【讨论】:

【参考方案2】:

我认为您的代码应该可以正常工作。

df.loc[df['state'] == 'Illinois', 'city-north'] = df['city']

df.loc[df['state'] != 'Illinois', 'city-south'] = df['city']

我什至尝试了多个条件和新输入,这些条件和新输入不在原始数据框中,并且仍然按如下方式工作:

df.loc[(df['state'] == 'Illinois') & (df['city'] =='Chicago'), 'city-north'] = 'New Entry']

df.loc[(df['state'] != 'Illinois') & (df['city'] =='Phoenix '), 'city-south'] = 'Another new entry'

请注意,我的回答的第二部分是在多个条件下显示更清晰,它仍然有效。它可用于添加带有新条目的新列。

【讨论】:

以上是关于根据其他列中的值在 python 3 (pandas) 数据框中创建新列的主要内容,如果未能解决你的问题,请参考以下文章

根据上一列中的值在 Python Dataframe 中构建行

遍历 pandas 行并根据其他列中的值设置列值

根据其他两列的值在 Pandas 中创建一个新列[重复]

根据另一列中的值删除一列的重复项,Python,Pandas

如何根据 pandas-python 中带有空格的图像拆分列中的值

如何根据列渲染器中的值在网格列中显示图像?