【问题标题】:merge two columns pandas dataframe into one string将两列熊猫数据框合并为一个字符串
【发布时间】:2018-12-18 00:09:35
【问题描述】:

我有以下数据框

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),但它没有我想要的那么干净 你能帮帮我吗?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    df.applyaxis=1 一起使用

    演示:

    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
    

    【讨论】:

      【解决方案2】:

      使用+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
      

      【讨论】:

        【解决方案3】:

        使用dropna 删除NaNs,转换为int,然后转换为strings,最后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
        

        【讨论】:

          【解决方案4】:

          你可以这样做:

          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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-30
            • 2017-06-11
            • 2016-01-01
            • 1970-01-01
            相关资源
            最近更新 更多