Python Pandas-在数据帧中合并两列

Python Pandas-在数据帧中合并两列,python,pandas,dataframe,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

我有一个熊猫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
关于如何完成这项工作,您有什么想法吗?

设置

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\u

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)
设置

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\u

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)

条件设置如何

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

条件设置如何

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
另一种解决方案(假设OP在
TTL1
列中有
NaN
):

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


这个问题有点模棱两可,但是熊猫方法
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

这个问题有点模棱两可,但是熊猫方法
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

这不管用。也许是因为在TTL2之后我有更多的专栏?这对我很有用。这意味着在你正在运行的和我正在运行的之间存在一些不明显的差异。这可能是库版本(怀疑),或数据差异(可能),或用户错误(你的或我的)。提问的最佳方式是提供一段创建数据的代码。通过这种方式,对于我们正在处理的数据集几乎没有歧义。我将用一个例子更新我的帖子。这不起作用。也许是因为在TTL2之后我有更多的专栏?这对我很有用。这意味着在你正在运行的和我正在运行的之间存在一些不明显的差异。这可能是库版本(怀疑),或数据差异(可能),或用户错误(你的或我的)。提问的最佳方式是提供一段创建数据的代码。通过这种方式,对于我们正在处理的数据集几乎没有歧义。我会用一个例子更新我的帖子。如果那些是空白的话,肯定会更直接。如果那些是空白的话,肯定会更直接。你在
TTL1
列中有
NaN
TTL1
列中有
NaN
(空字符串)吗?