[英]merge two columns pandas dataframe into one string
我有以下数据帧
import pandas as pd
import numpy as np
df = pd.DataFrame(data=[['yes',8],['yes',7],['no',np.nan],['yes',7],['no',np.nan]],columns=['passed','score'])
Out[8]:
passed score
0 yes 8.0
1 yes 7.0
2 no NaN
3 yes 7.0
4 no NaN
我想将通过的列合并到只有1列,如下所示
Out[10]:
passed
0 yes_8
1 yes_7
2 no
3 yes_7
4 no
我的尝试是df["passed"].map(str) + '_' + df["score"].map(str)
但是它不像我想要的那么干净你能帮我吗?
使用axis=1
df.apply
演示:
import pandas as pd
import numpy as np
df = pd.DataFrame(data=[['yes',8],['yes',7],['no',np.nan],['yes',7],['no',np.nan]],columns=['passed','score'])
df["New"] = df.apply(lambda x: "yes_{}".format(int(x["score"])) if x["passed"] == "yes" else "no", axis=1)
print(df)
输出:
passed score New
0 yes 8.0 yes_8
1 yes 7.0 yes_7
2 no NaN no
3 yes 7.0 yes_7
4 no NaN no
使用+
和pandas.DataFrame.apply
:
df['merged']=df['passed'].astype(str)+'_'+df['score'].fillna(' ').astype(str)
print(df['merged'].apply(lambda x: x.replace('_ ','').split('.')[0]))
输出:
0 yes_8
1 yes_7
2 no
3 yes_7
4 no
Name: merged, dtype: object
你可以这样做:
df['passed'] = (df['passed'] + '_' + df['score'].fillna('').astype(str)).str.rstrip('_')
输出:
passed score
0 yes_8.0 8.0
1 yes_7.0 7.0
2 no NaN
3 yes_7.0 7.0
4 no NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.