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