Python:DataFrame基于其他列的新列

Python:DataFrame基于其他列的新列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个df,有两列,如下所示: A B 0 100-00南 1200-00南 2其他300-00 3 100-00文本 4其他nan 我需要创建C列,该列将应用如下逻辑: 如果B是nan,那么A 如果B以数字开头,则B 其他A 我有如下代码,它工作得很好,但我相信可能有一种更好、更有效的方法: C=[] 对于rangedf.shape[0]中的r: 如果df['B'].iloc[r]='nan': C.appenddf['A'].iloc[r] elif df['B'].iloc[r][:3]

我有一个df,有两列,如下所示:

A B 0 100-00南 1200-00南 2其他300-00 3 100-00文本 4其他nan 我需要创建C列,该列将应用如下逻辑:

如果B是nan,那么A 如果B以数字开头,则B 其他A 我有如下代码,它工作得很好,但我相信可能有一种更好、更有效的方法:

C=[] 对于rangedf.shape[0]中的r: 如果df['B'].iloc[r]='nan': C.appenddf['A'].iloc[r] elif df['B'].iloc[r][:3].isnumeric: C.appenddf['B'].iloc[r] 其他: C.appenddf['A'].iloc[r] df['C']=C df A、B、C 0 100-00南100-00 1200-00南200-00 2其他300-00 300-00 3 100-00文本100-00 4其他nan其他 提前感谢您的帮助。

如果df.B中的第一个字符是数字,则我将简化df.B的解决方案,并使用regex^测试字符串的开头,\d测试数字:

我简化了df.B的解决方案,如果df.B中的第一个字符是数字,则用regex^作为字符串的开头,用\d作为数字:


不一定效率更高,但这是一种更具python风格的方式

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)

不一定效率更高,但这是一种更具python风格的方式

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)