簡體   English   中英

使用條件從現有 dataframe 列創建新列

[英]Create new column from existing dataframe column with condition

GroupID 列有兩個值,一個是字母數字,另一個是數字,我想使用列的字母數字部分來創建新列,有一些條件,比如 o_dict 中是否存在字母數字,那么它應該返回值,否則它應該只返回“NOT IN DIC”

GroupID
0   ad32s;#1214;#rf343;#4343
1   wd435;#6464;#ed532;#5454
2   av345e:#3132
3   ok132d;#8897
4   tn123h;#0980
5   as845;#657;#un567t;#456;#qw147;#123
6   ok132d;#8897
7   as845;#657;#un567t;#456;#qw147;#123
8   wd435;#6464;#ed532;#5454

o_dict= {"ad32s":"rupesh","ed532":"Frank","dr501u":"David","ok132d":"Ripal",
         "qw147":"ilesh","av345e":'carls'}

下面是我的代碼:

def function01(row):
o_dict= {"ad32s":"rupesh","ed532":"Frank","dr501u":"David","ok132d":"Ripal","qw147":"ilesh","av345e":'carls'}
    if element.isalnum():
        if element in o_dict:
            return owner_dict[element]
        else:
            return "NOT IN DIC"
    else:
        continue
df['New_column'] = df.apply(lambda x: function01(x), axis=1)

如果字母數字值最初為 position,則此代碼有效,但如果它為 3 或 5 position,則此代碼無效。 它適用於第 0,2,3,4 6 行,但不適用於 1,5,7,8。

O/p 應該有兩列,其中包含與 groupid 匹配的 dict 值,否則它應該填充“NOT IN DIC”。

我不確定我現在能做什么,是否有另一種方法來獲得這個值? 是否有任何搜索 function 可用於搜索此值?

感謝您的幫助:)

我發現在我的代碼中 for-loop 僅適用於列表中的第一個值,並且它填充“NOT IN DIC”而不檢查其他值。 我現在做了以下更改,我得到了預期的 output。

def function01(row):
o_dict= {"ad32s":"rupesh","ed532":"Frank","dr501u":"David","ok132d":"Ripal","qw147":"ilesh","av345e":'carls'}
listA = row['Assigned'].split(";#")
listB = [i for i in listA if i.isdigit()==False]
for element in listA:
    if element in owner_dict:
        return owner_dict[element]
    else:
        continue    
return "NOT IN DIC"

df['New_column'] = df.apply(lambda x: function01(x), axis=1)

您可能想使用numpy.select

    import numpy
    import pandas

    d = {
        "GroupID": [
            "ad32s;#1214;#rf343;#4343",
            "wd435;#6464;#ed532;#5454",
            "av345e:#3132",
            "ok132d;#8897",
            "tn123h;#0980",
            "as845;#657;#un567t;#456;#qw147;#123",
            "ok132d;#8897",
            "as845;#657;#un567t;#456;#qw147;#123",
            "wd435;#6464;#ed532;#5454",
        ]
    }

    o_dict = {
        "ad32s": "rupesh",
        "ed532": "Frank",
        "dr501u": "David",
        "ok132d": "Ripal",
        "qw147": "ilesh",
        "av345e": "carls",
    }

    df = pandas.DataFrame.from_dict(d)

    values = []
    def fn(k):
        values.append(o_dict[k])
        return df["GroupID"].str.find(k) != -1
    conditions = list(map(fn, o_dict))

    df["New_column"] = numpy.select(conditions, values, default="NOT IN DIC")
    print(df)

暫無
暫無

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

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