![](/img/trans.png)
[英]Python pandas: add new columns based on the existed a column value, and set the value of new columns as 1 or 0
[英]Python Pandas - Add a new column with value based on first and last name in multiple columns
尽管我自己还是一个初学者,但我正在尝试向通常使用Excel处理CSV文件的同事解释一些Pandas基础知识。
我有能力找到一个“好的”答案来解决给定的问题,我想以此为例。
我有这样的CSV文件:
"Id","First","Last"
"109","Karl","Evans"
"113","Louise","Hudson"
"106","Catherine","Johnson"
然后将其导入到Python中,如下所示:
import pandas
df = pandas.read_csv('C:\\example.csv')
我想在df
添加一个名为“ StartsWithJOrK”的新列。
它应该说“是!” 对于小写的姓氏或小写的姓氏以“ j”或“ k”开头的任何人。 对于小写名称都不以“ j”或“ k”开头的任何人,应说“ BooHiss”。
(这是一个过度紧张的示例,但是我觉得它包含了很多我不知道如何做或不知道如何“ Python地”组合的东西。)
什么是最pythonic,最少代码行的方法?
不是最简单的熊猫入门...
df['StartsWithJorK'] = 'BooHiss'
starting_letters = ['j', 'k']
df.loc[(df.First.str[0].str.lower().isin(starting_letters)) |
df.Last.str[0].str.lower().isin(starting_letters), 'StartsWithJorK'] = 'Yay!'
>>> df
Id First Last StartsWithJorK
0 109 Karl Evans Yay!
1 113 Louise Hudson BooHiss
2 106 Catherine Johnson Yay!
df.First.str[0]
查找名称的第一个字符。
.str.lower()
将这一系列字母转换为小写。
.isin(starting_letters)
检查每个小写字母是否在我们的起始字母列表中,即“ j”和“ k”。
.loc
用于基于标签和布尔的索引 ,其中StartsWithJorK
列设置为Yay!
对于每个匹配条件。
如果您也不想导入numpy
,则可以执行
import numpy as np
import pandas as pd
mask = df['Last'].str.match('[JjKk]') | df['First'].str.match('[JjKk]')
df['StartsWithJOrK'] = np.where(mask, 'Yay!', 'BooHiss')
输出:
Id First Last StartsWithJOrK
0 109 Karl Evans Yay!
1 113 Louise Hudson BooHiss
2 106 Catherine Johnson Yay!
还有其他创建上述mask
。 这是一个:
mask = (df[['First', 'Last']]
.apply(lambda x: x.str.match('[JjKk]'), axis=1)
.any(axis=1))
或者,从.str.lower()
的答案对.str.lower()
的使用中.str.lower()
提示:
mask = (df[['First', 'Last']]
.apply(lambda x: x.str.lower().str.match('[jk]'), axis=1)
.any(axis=1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.