簡體   English   中英

Python:根據if語句條件填充新的df列

[英]Python: Populate new df column based on if statement condition

我正在嘗試新的東西。 我想根據影響具有值的另一列的某些條件填充新的 df 列。

我有一個包含兩列(ID,零售商)的數據框。 我想根據 ID 列中的 ID 填充零售商列。 我知道如何在 SQL 中使用 CASE 語句執行此操作,但是如何在 python 中執行此操作?

我看過這個例子,但它不是我正在尋找的。

Python:使用 if/else 語句填充新列

import pandas as pd

data = {'ID':['112','5898','32','9985','23','577','17','200','156']}

df = pd.DataFrame(data)

df['Retailer']=''

if df['ID'] in (112,32):
    df['Retailer']='Webmania'
elif df['ID'] in (5898):
    df['Retailer']='DataHub'
elif df['ID'] in (9985):
    df['Retailer']='TorrentJunkie'
elif df['ID'] in (23):
    df['Retailer']='Apptronix'
else: df['Retailer']='Other'


print(df)

我期望看到的輸出是這樣的:

     ID Retailer
0   112 Webmania
1  5898 DataHub
2    32 Webmania
3  9985 TorrentJunkie
4    23 Apptronix
5   577 Other
6    17 Other
7   200 Other
8   156 Other

使用numpy.select和測試多個值使用Series.isin ,也如需要測試串像樣本數據改變號碼的數字像112'112'

m1 = df['ID'].isin(['112','32'])
m2 =  df['ID'] == '5898'
m3 =  df['ID'] == '9985'
m4 =  df['ID'] == '23'
vals = ['Webmania', 'DataHub', 'TorrentJunkie', 'Apptronix']
masks = [m1, m2, m3, m4]

df['Retailer'] = np.select(masks, vals, default='Other')
print(df)

     ID       Retailer
0   112       Webmania
1  5898        DataHub
2    32       Webmania
3  9985  TorrentJunkie
4    23      Apptronix
5   577          Other
6    17          Other
7   200          Other
8   156          Other

如果許多類別也可以使用具有自定義功能的解決方案:

def get_data(x):
    if x in ('112','32'):
        return 'Webmania'
    elif x == '5898':
        return 'DataHub'
    elif x == '9985':
        return 'TorrentJunkie'
    elif x == '23':
        return 'Apptronix'
    else: return 'Other'


df['Retailer'] =  df['ID'].apply(get_data)
print (df)
     ID       Retailer
0   112       Webmania
1  5898        DataHub
2    32       Webmania
3  9985  TorrentJunkie
4    23      Apptronix
5   577          Other
6    17          Other
7   200          Other
8   156          Other

或者按字典使用map ,如果沒有匹配得到NaN ,所以添加了fillna

d = {'112': 'Webmania','32':'Webmania',
    '5898':'DataHub',
    '9985':'TorrentJunkie',
    '23':'Apptronix'}

df['Retailer'] =  df['ID'].map(d).fillna('Other')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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