4

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

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 列中。我怎样才能做到这一点?

4

2 回答 2

5

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

 df.max(axis=1)

根据评论,如果它在 Python 3 中不起作用,请先将您的投影NaN到字符串中:

df.fillna('').max(axis=1)
于 2013-06-20T17:19:21.373 回答
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

由于NaNs 在求和时被视为 0,因此它们不会出现。

一些警告:您需要确保只有一个列具有非 Nan 才能正常工作。它也仅适用于数字数据。

你也可以使用

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

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

于 2013-06-20T16:01:21.060 回答