Python Pandas - 合并数据框中的两列

时间:2016-12-26 15:41:52

标签: python pandas dataframe

我有一只看起来像这样的熊猫df:

     TTL1    TTL2
0    val1    
1    val2   
2    val3
3             val4
4    val5    
5    val6   
6    val7
7             val8

我想这样做:

     TTL1
0    val1    
1    val2   
2    val3
3    val4
4    val5    
5    val6   
6    val7
7    val8

请问我如何完成这项工作?

4 个答案:

答案 0 :(得分:3)

条件设定怎么样?

In [260]: df.loc[df.TTL1 == '', 'TTL1'] = df.TTL2

In [261]: df
Out[261]:
   TTL1  TTL2
0  val1
1  val2
2  val3
3  val4  val4
4  val5
5  val6
6  val7
7  val8  val8

或者,使用np.where

In [266]: df.TTL1 = np.where(df.TTL1 == '', df.TTL2, df.TTL1)

In [267]: df
Out[267]:
   TTL1  TTL2
0  val1
1  val2
2  val3
3  val4  val4
4  val5
5  val6
6  val7
7  val8  val8

答案 1 :(得分:2)

set_up

df = pd.DataFrame([
        ['val1', np.nan],
        ['val2', np.nan],
        ['val3', np.nan],
        [np.nan, 'val4'],
        ['val5', np.nan],
        ['val6', np.nan],
        ['val7', np.nan],
        [np.nan, 'val8']
    ], columns=['TTL1', 'TTL2'])

最简单的答案是使用combine_first

df.TTL1.combine_first(df.TTL2).to_frame()

   TTL1
0  val1
1  val2
2  val3
3  val4
4  val5
5  val6
6  val7
7  val8

如果这些空白实际上是'',那么先执行此操作

df.replace('', np.nan, inplace=True)

答案 2 :(得分:1)

又一个解决方案(假设OP在NaN列中有TTL1个):

In [127]: df.TTL1.fillna(df.TTL2)
Out[127]:
0    val1
1    val2
2    val3
3    val4
4    val5
5    val6
6    val7
7    val8
Name: TTL1, dtype: object

答案 3 :(得分:0)

问题中有点含糊不清,但是pandas方法stack用于将所有值放入单个列中。

df.stack()

输出

0  TTL1    val1
1  TTL1    val2
2  TTL1    val3
3  TTL2    val4
4  TTL1    val5
5  TTL1    val6
6  TTL1    val7
7  TTL2    val8
dtype: object