在Pandas中合并单个数据帧中的2列



我想合并同一数据帧的两列,但要使用一些特定条件。

考虑以下数据帧:

数字第一 第二
1 Nan
2 4C
3A 5
6
7

您可以使用combine函数来执行自定义函数,例如:

import pandas as pd
import numpy as np
def custom_combine(v1, v2):
if pd.isna(v1) & pd.isna(v2):
return np.nan
elif pd.isna(v1):
return v2
elif pd.isna(v2):
return v1
else:
return f'{v1} - {v2}'
df['Result'] = (
# ignore non alphanumeric values
df.where(df.apply(lambda s: s.str.isalnum()))
.pipe(lambda df: 
df['Number-first'].combine(df['Number-second'], custom_combine)
)
)
print(df)
Number-first Number-second  Result
0            1           NaN       1
1            2            4C  2 - 4C
2           3A             5  3A - 5
3          NaN             6       6
4          NaN             7       7
5          NaN           NaN     NaN

或者,您可以利用Panda的矢量化字符串方法

import pandas as pd
import numpy as np
df['Result'] = (
df.where(df.apply(lambda s: s.str.isalnum()))
.pipe(lambda df: 
df['Number-first'].str.cat(df['Number-second'], '-', na_rep='')
)
.str.strip('-')
.replace('', np.nan)
)
print(df)
Number-first Number-second Result
0            1           NaN      1
1            2            4C   2-4C
2           3A             5   3A-5
3          NaN             6      6
4          NaN             7      7
5          NaN           NaN    NaN

最新更新