Python 熊猫映射并连接多个列

Python 熊猫映射并连接多个列,python,pandas,Python,Pandas,我需要从我的df中传递5列,并将得到的5个值连接到同一行中 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

我需要从我的df中传递5列,并将得到的5个值连接到同一行中

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

我需要将每个df行传递到该函数中,并将结果dict和bool中的值插入到同一行
(cleaned\u BP、cleaned\u Pain、cleaned\u Pulse、cleaned\u RR、cleaned\u Temp、bool isclean)
,然后在我所有的df中运行此操作。

我发现的最简单方法:

>>> 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  

这就是我最后做的,它工作并返回所需的输出

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

CleanVSSET
必须按特定顺序设置值<代码>(*x.values)从df不能保证您可以轻松地将其更改为
vscleaner.CleanVSSet(x['Pulse']、x['RR']、x['Pain']、x['Temp']、x['BP'])
我使用了您的答案,速度更快