【问题标题】:Merge 2 columns into 1 column将 2 列合并为 1 列
【发布时间】:2019-10-24 08:50:40
【问题描述】:

我想将 2 列合并为 1 列并删除 nan。

我有这些数据:

     Name       A       B   
    Pikachu   2007    nan
    Pikachu   nan     2008
    Raichu    2007    nan
    Mew       nan     2018

预期结果:

     Name     Year   
    Pikachu   2007   
    Pikachu   2008   
    Raichu    2007   
    Mew       2008 

我试过的代码:

df['Year']= df['A','B'].astype(str).apply(''.join,1)

但我的结果是这样的:

 Name     Year   
Pikachu   2007nan   
Pikachu   nan2008   
Raichu    2007nan   
Mew       nan2008

【问题讨论】:

  • 两列中是否都有可能的值?

标签: python pandas dataframe


【解决方案1】:

使用Series.fillnaDataFrame.pop 提取列并最后转换为整数:

df['Year']= df.pop('A').fillna(df.pop('B')).astype(int)

#if possible some missing values in Year column
#df['Year']= df.pop('A').fillna(df.pop('B')).astype('Int64')
print (df)
      Name  Year
0  Pikachu  2007
1  Pikachu  2008
2   Raichu  2007
3      Mew  2018

【讨论】:

  • 这对后袋很有用——谢谢!
【解决方案2】:

请您尝试关注一下。

df['Year']=df['A'].combine_first(df['B'])
df

输出如下。

     Name    A       B      Year
0   Pikachu 2007.0  NaN     2007.0
1   Pikachu NaN     2008.0  2008.0
2   Raichu  2007.0  NaN     2007.0
3   Mew     NaN     2018.0  2018.0


要在新数据框中仅获取 Nameyear 列,请尝试以下操作。

df['Year']=df['A'].combine_first(df['B'])
df1=df[['Name','Year']]
df1

【讨论】:

    【解决方案3】:
    df = df.fillna(0)
    df["Year"] = df["A"] + df["B"]
    df = df[['Name','Year']]
    

    【讨论】:

      【解决方案4】:

      numpy.where 可能有用

      df["A"] = np.where(df["A"].isna(), df["B"], df["A"]).astype("int")
      df = df.drop("B", axis=1)
      print(df)
          Name    Year
      0   Pikachu 2007
      1   Pikachu 2008
      2   Raichu  2007
      3   Mew     2018
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 2013-12-14
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        • 2022-07-21
        • 1970-01-01
        相关资源
        最近更新 更多