通过考虑两列,想知道如何在python数据框架中使用startswith吗

2024-10-02 14:16:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的输入是(A,B有数据,需要在C列中输出)

逻辑是正确的。如果我在A和B列中的前四个字母是INKA或IDKA,那么Out是KAR

同样的方法是INAP或IDAP然后AP和INRJ或IDRJ然后RAJ

输入为A和B,预期输出为C

^{tb1}$

Tags: 数据方法字母逻辑outaprajkar
3条回答

您可以通过迭代、从开始以及如果其他方式来实现这一点!像这样

dataframe = [
['IDKA106829_KMGL_H_Z_8121','INKA100345_KMGL_H_Z_8251',''],
['IDRJ100041_BKNR_H_Z_8251','INRJ200420_BKNR_H_Z_8251','']
]

for row in dataframe:
    for column in row:
        if column.startswith('IDKA') or column.startswith('INKA'):
            row[2] = 'KAR'
        elif column.startswith('INJR') or column.startswith('IDRJ'):
            row[2] = 'RAJ'

print (dataframe)

您可以使用np.select

conditions = [(df["A"].str[:4].isin(["INKA", "IDKA"]))|(df["B"].str[:4].isin(["INKA", "IDKA"])),
              (df["A"].str[:4].isin(["INAP", "IDAP"]))|(df["B"].str[:4].isin(["INAP", "IDAP"])),
              (df["A"].str[:4].isin(["INRJ", "IDRJ"]))|(df["B"].str[:4].isin(["INRJ", "IDRJ"]))]

df["C"] = np.select(conditions, ["KAR", "AP", "RAJ"], None)

或者,您可以使用mapcombine_first

mapper = {"INKA": "KAR", "IDKA": "KAR", "INAP": "AP", "IDAP": "AP", "INRJ": "RAJ", "IDRJ": "RAJ"
df["C"] = df["A"].str[:4].map(mapper).combine_first(df["B"].str[:4].map(mapper))

使用startswithnp.select

conditions = [df['A'].str.startswith('INKA') | df['B'].str.startswith('INKA') | df['A'].str.startswith('IDKA') | df['B'].str.startswith('IDKA'),
              df['A'].str.startswith('INAP') | df['B'].str.startswith('INAP') | df['A'].str.startswith('IDAP') | df['B'].str.startswith('IDAP'),
              df['A'].str.startswith('INRJ') | df['B'].str.startswith('INRJ') | df['A'].str.startswith('IDRJ') | df['B'].str.startswith('IDRJ')]
 
choices = ['KAR','AP', 'RAJ']
 
df['C'] = np.select(conditions, choices, default=None)

结果df:

enter image description here

相关问题 更多 >

    热门问题