Python: pandas Новый столбец DataFrame на основе других столбцов - PullRequest
1 голос
/ 27 апреля 2020

У меня есть df с двумя столбцами, как показано ниже:

        A       B
0  100-00     nan
1  200-00     nan
2   other  300-00
3  100-00    text
4   other     nan

Мне нужно создать столбец C, который будет применять logi c, как показано ниже:

  • если B равно nan, то A
  • , если B начинается с цифры c, тогда B
  • , в противном случае A

У меня есть код, как показано ниже, который работает просто отлично, но я полагаю, что может быть лучший, более эффективный способ сделать это:

C = []
for r in range(df.shape[0]):
    if df['B'].iloc[r] == 'nan':
        C.append(df['A'].iloc[r])
    elif df['B'].iloc[r][:3].isnumeric():
        C.append(df['B'].iloc[r])
    else:
        C.append(df['A'].iloc[r])
df['C'] = C

df
        A       B       C
0  100-00     nan  100-00
1  200-00     nan  200-00
2   other  300-00  300-00
3  100-00    text  100-00
4   other     nan   other

Заранее спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Я упрощаю решение для df.B, если первый символ в df.B имеет число c, проверено с Series.str.contains с регулярным выражением ^ для начала строки и \d для числа в numpy.where:

df['C'] = np.where(df['B'].str.contains(r'^\d', na=False), df.B, df.A)
#alternative
#df['C'] = df.B.where(df['B'].str.contains(r'^\d', na=False), df.A)
print (df)
        A       B       C
0  100-00     NaN  100-00
1  200-00     NaN  200-00
2   other  300-00  300-00
3  100-00    text  100-00
4   other     NaN   other
1 голос
/ 27 апреля 2020

Не обязательно более эффективный, но более питонский c способ сделать это

import pandas as pd

df = pd.DataFrame({'A': ['100-00', '200-00', 'other', '100-00', 'other'], 'B': ['nan', 'nan', '300-00', 'text', 'nan']})

def label_columnC(row):
    if row['B'] == 'nan':
        return row['A']
    elif row['B'][:3].isnumeric():
        return row['B']
    else:
        return row['A']

df['C'] = df.apply(lambda row: label_columnC(row), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...