繁体   English   中英

将两列pandas dataframe合并为一个字符串

[英]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

使用dropna删除NaN ,转换为int ,然后转换为string s,最后add到列:

a = '_' + df['score'].dropna().astype(int).astype(str)
df['passed'] = df['passed'].add(a, fill_value='')
print (df)
  passed  score
0  yes_8    8.0
1  yes_7    7.0
2     no    NaN
3  yes_7    7.0
4     no    NaN

你可以这样做:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM