如何扫描pandas行的第一个非零值并使用数字创建新列

时间:2015-04-15 20:37:52

标签: python python-2.7 pandas dataframe

我有一个如下所示的大数据集:

+---+--------------------------------------+---------------------------------------+--------------------------+
|   | dc(uid): interaction_single_message_ | dc(uid): interaction_single_message_1 | dc(uid): interaction_yes |
+---+--------------------------------------+---------------------------------------+--------------------------+
| 0 |                                    0 |                                     0 |                    89884 |
| 1 |                                    0 |                                    29 |                        0 |
| 2 |                                    0 |                                   239 |                      239 |
| 3 |                                  324 |                                     0 |                        0 |
| 4 |                                12021 |                                     0 |                    12021 |
+---+--------------------------------------+---------------------------------------+--------------------------+

如何逐行进行并选择遇到的第一个数字并将其添加到同一索引的新列中。如果一行中有多个数字,它们将始终相同,这就是我要求第一个遇到的数字的原因。

理想的输出是这样的:

+---+-------+
|   | nums  |
+---+-------+
| 0 | 89884 |
| 1 |    29 |
| 2 |   239 |
| 3 |   324 |
| 4 | 12021 |
+---+-------+

我是否会使用groupby.unique()来执行此操作?

1 个答案:

答案 0 :(得分:1)

在你的样本df中,只要所有当前值都相同,然后以下方法就可以了,我们使用布尔条件来掩盖0值,然后调用mean并传递参数axis=1计算行数的平均值:

In [24]:

df[df>0].mean(axis=1)
Out[24]:
0    89884
1       29
2      239
3      324
4    12021
dtype: float64