将2列合并为1列

时间:2019-10-24 08:50:40

标签: python pandas dataframe

我想将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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

df = df.fillna(0)
df["Year"] = df["A"] + df["B"]
df = df[['Name','Year']]

答案 2 :(得分:1)

请您尝试以下。

pickle_in = open('test_pickle','rb')
    net = pickle.load(pickle_in)
    all_params = net['params']
    print(net['network'])
    print(all_params)
    network = lasagne.layers.set_all_param_values(net['network'], all_params)
    print(network)

输出如下。

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 Name列,请尝试以下操作。

year

答案 3 :(得分:0)

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