pandas Python:使用字典、函数和lambda从新列中获取条件行值

uhry853o  于 2023-01-19  发布在  Python
关注(0)|答案(2)|浏览(145)

我有一个 Dataframe :

id
id1
id2
id3
id8
id9

我想添加一个新列new,其条件行值如下:
如果id == id1中的行,则新行为id1 is cat 1
如果id == id2中的行,则新行为id2 is cat 2
如果id == id3中的行,则新行为id3 is cat 3
否则为idx is cat 0,其中x是不属于id1id2id3的ID
这是我目前为止尝试的方法,我认为解决方案应该是将for循环 Package 在一个函数中,并将该函数与apply和/或lambda一起使用。

import pandas as pd

df = pd.DataFrame({
'id': ['id1', 'id2', 'id3', 'id8', 'id9']
}) 
df

dict = {'id1': '1', 'id2': '2', 'id3': '3'}

for k, val in dict.items():
    if k == "id1" or k == "id2" or k == "id3" in df['state']:
        print(str(k) + " is cat " + str(val))
    else:
        print(str(k) + " is cat 0")

预期结果:

id     new
id1   id1 is cat 1
id2   id2 is cat 2
id3   id3 is cat 3 
id8   id8 is cat 0
id9   id9 is cat 0
xsuvu9jc

xsuvu9jc1#

这是一个简单的字典查找。

import pandas as pd

df = pd.DataFrame({
'id': ['id1', 'id2', 'id3', 'id8', 'id9']
}) 

subst = {'id1': '1', 'id2': '2', 'id3': '3'}

def fix(row):
    val = subst.get(row['id'],0)
    return f"{row['id']} is cat {val}"

df['new'] = df.apply(fix,axis=1)
print(df)

输出:

id          new
0  id1  id1 is cat 1
1  id2  id2 is cat 2
2  id3  id3 is cat 3
3  id8  id8 is cat 0
4  id9  id9 is cat 0
xdnvmnnf

xdnvmnnf2#

您可以获取编号并保存在m中,然后使用numpy.where,如果编号为m.isin(['1','2','3']),则使用m的编号,否则使用0

import numpy as np
m = df['id'].str[2:]
tf = m.isin(['1','2','3'])
df['new'] = np.where(tf, 
                     df['id'] + " is cat " + m , 
                     df['id'] + " is cat 0")
print(df)

输出:

id           new
0  id1  id1 is cat 1
1  id2  id2 is cat 2
2  id3  id3 is cat 3
3  id8  id8 is cat 0
4  id9  id9 is cat 0

相关问题