我想合并同一数据帧的两列,但要使用一些特定条件。
考虑以下数据帧:
数字第一 | 第二 |
---|---|
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