2015-06-04 2 views
2

Мне нужно передать 5 столбцов из моего pandas df и соединить полученные 5 значений в одну строку.pandas map и join multiple columns

df.head() 

      BP Pain Pulse RR Temp 
0  111/111  9  75 13 97.1 
1  None None None 18  98 
2  164/87  6  79 15 None 
3  120/72  5  77 18  97 

Другой модуль, который называется VSCleaner

VSCleaner.CleanVSSET(df.BP, df.Pain, df.Pulse, df.RR, df.Temp) 

будет возвращать что-то вроде

{'BP': '120/40', 'Pain': 2, 'Pulse': 180, 'RR': 18, 'Temp': 66.0}, True 

мне нужно пройти каждый ДФ строку в этой функции и значения в результате Dict и BOOL для вставки в ту же строку (cleaned_BP, cleaned_Pain, cleaned_Pulse, cleaned_RR, cleaned_Temp , BOOL isCleaned) и запустить это во всех моих df.

ответ

1

Самый простой способ я нашел:

>>> def CleanVSSET_apply(x): 
     # in my case CleanVSSET just returns the same values 
     d = CleanVSSET(*x.values) 
     r = d[0] 
     r['Cleaned'] = d[1] 
     return pd.Series(r) 
>>> 
>>> df_cleaned = df.apply(CleanVSSET_apply, axis=1) 
     BP Cleaned Pain Pulse RR Temp 
0 111/111 True  9 75 13 97.1 
1  None True None None 18 98 
2 164/87 True  6 79 15 None 
3 120/72 True  5 77 18 97 

>>> pd.merge(df, df_cleaned, left_index=True, right_index=True, suffixes=['', 'cleaned']) 
     BP Pain Pulse RR Temp BP_cleaned Cleaned Pain_cleaned \ 
0 111/111  9 75 13 97.1 111/111 True   9 
1  None None None 18 98  None True   None 
2 164/87  6 79 15 None  164/87 True   6 
3 120/72  5 77 18 97  120/72 True   5 

    Pulse_cleaned RR_cleaned Temp_cleaned 
0   75   13   97.1 
1   None   18   98 
2   79   15   None 
3   77   18   97 
+0

'CleanVSSET' должен иметь значения в определенном порядке. '(* x.values)' из df не гарантирует, что – Hakim

+0

вы можете легко изменить его на 'vscleaner.CleanVSSet (x ['Pulse'], x ['RR'], x ['Pain'], x ['Temp'], x ['BP']) ' –

+0

Я использовал ваш ответ быстрее – Hakim

0

Вот что я наконец-то работает и возвращает нужный выход.

for index, row in df.iterrows(): 
    cleaned_dict, isSwapped = vscleaner.CleanVSSet(row['Pulse'], row['RR'], row['Pain'], row['Temp'], row['BP']) 
    df.loc[index, 'Pulse_cleaned'] = cleaned_dict['Pulse'] 
    df.loc[index, 'RR_cleaned'] = cleaned_dict['RR'] 
    df.loc[index, 'Pain_cleaned'] = cleaned_dict['Pain'] 
    df.loc[index, 'Temp_cleaned'] = cleaned_dict['Temp'] 
    df.loc[index, 'BP_cleaned'] = cleaned_dict['BP'] 
    df.loc[index, 'isSwapped'] = isSwapped