连接列熊猫

时间:2013-06-20 15:39:55

标签: python pandas

我正在尝试将几个主要包含NaN的列连接到一个,但这里只是一个例子:

2013-06-18 21:46:33.422096-05:00  A    NaN
2013-06-18 21:46:35.715770-05:00  A    NaN
2013-06-18 21:46:42.669825-05:00  NaN    B
2013-06-18 21:46:45.409733-05:00  A    NaN
2013-06-18 21:46:47.130747-05:00  NaN    B
2013-06-18 21:46:47.131314-05:00  NaN    B

这可能会持续3或4或10列,其中1列为pd.notnull(),其余为NaN。

我想以最快的方式将这些连接成1列。我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

每行得到一个字符串,其他单元格为NaN,然后要应用的数学是要求max值:

 df.max(axis=1)

根据评论,如果它在Python 3中不起作用,请在{}之前将NaN投影到字符串中:

df.fillna('').max(axis=1)

答案 1 :(得分:0)

你可以做到

In [278]: df = pd.DataFrame([[1, np.nan], [2, np.nan], [np.nan, 3]])

In [279]: df
Out[279]: 
    0   1
0   1 NaN
1   2 NaN
2 NaN   3

In [280]: df.sum(1)
Out[280]: 
0    1
1    2
2    3
dtype: float64

由于NaN在求和时被视为0,因此它们不会显示。

有几点需要注意:您需要确保其中一列具有非Nan,才能使其正常工作。它也只适用于数字数据。

您也可以使用

df.fillna(method='ffill', axis=1).iloc[:, -1]

最后一列现在将包含所有有效的观察结果,因为有效的观察结果已经填满了。请参阅文档here。第二种方式应该更灵活但更慢。我用iloc[:, -1]切掉每一行和最后一列。