如何基于条件有效地连接多个熊猫数据框列?

时间:2019-04-08 12:04:52

标签: python-3.x pandas concatenation

我正在尝试在Python中连接多个列。要连接的列根据其他一些列的值而有所不同。您如何有效地做到这一点?

我已经尝试创建一个对条件字段进行分组的键,并将其与用于检查每一行是否在特定组中的for循环结合使用。当然,这需要很长时间才能完成。

例如,给定一个数据帧(df):

df = pd.DataFrame({'cond_1': ['A', 'B', 'B', 'C', 'D'], 
              'cond_2': ['one', 'two', 'three', 'three', 'four'], 
             'concat_1': ['Mon', 'Tue', 'Fri', 'Wed', 'Thu'],
             'concat_2': ['Sep', 'Oct', 'Oct', 'Nov', 'Dec'],
             'concat_3': ['first', 'second', 'second', 'third', 'fourth']})

我有以下规则:
-如果cond_1 ='A',则concat_1 + concat_2
-如果cond_1 ='B',则如果cond_2 ='two',则concat_1 + concat_3否则concat_1 + concat_2
-如果cond_1位于('C','D')中,则concat_2 + concat_3

这将导致以下结果:

cond_1 | cond_2 | concat_1 | concat_2 | concat_3 | result    
---------------------------------------------------------
A      | one    | Mon      | Sep      | first    | MonSep  
B      | two    | Tue      | Oct      | second   | Tuesecond  
B      | three  | Fri      | Oct      | second   | FriOct  
C      | three  | Wed      | Nov      | third    | Novthird  
D      | four   | Thu      | Dec      | fourth   | Decfourth  

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

You do this with apply using a function to do the if check and concatenation like this

def concate_it(row):
    if row['cond_1'] == 'A':
        return row['concat_1'] + row['concat_2']
    elif row['cond_1'] == 'B' and row['cond_2'] == 'two':
        return row['concat_1'] + row['concat_3']
    elif row['cond_1'] == 'B' and row['cond_2'] != 'two':
        return row['concat_1'] + row['concat_2']
    elif row['cond_1'] in ['C', 'D']:
        return row['concat_2'] + row['concat_3']

df['result'] = df.apply(lambda row : concate_it(row), axis=1)