簡體   English   中英

Python Pandas-在多列中添加基於名字和姓氏的新列

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM