[英]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.