【发布时间】:2021-11-02 09:16:37
【问题描述】:
我有一个熊猫DataFrame,具有以下属性,
| timestamp | code | code_2 | q1 | q2 | q3 |
|---|---|---|---|---|---|
| 1525815633939 | 1 | 5 | 0.528285138670663 | 0.0 | -10.2012590087440983 |
| 1525815633979 | 1 | 5 | 0.728820351190643 | 0.0 | -10.1985732939503924 |
| 1525815633990 | 6 | 5 | 9.7439931640624877 | 10.25547685467354 | |
| 1525815633990 | 6 | 5 | 0.92935559526222 | ||
| 1525815634000 | 6 | 5 | 9.7079931640624864 | 10.25475688648455 | |
| 1525815634000 | 6 | 5 | 0.029623209410135 |
如您所见,有时一个条目会一分为二,尽管它不是双值的。最后两对行对应于相同的timestamps、相同的code 和相同的code_2,但q1,q2,q3 被拆分。
(timestamps、code 和 code_2 构成我的唯一标识符)。
我想要什么,
| timestamp | code | code_2 | q1 | q2 | q3 |
|---|---|---|---|---|---|
| 1525815633939 | 1 | 5 | 0.528285138670663 | 0.0 | -10.2012590087440983 |
| 1525815633979 | 1 | 5 | 0.728820351190643 | 0.0 | -10.1985732939503924 |
| 1525815633990 | 6 | 5 | 0.92935559526222 | 9.7439931640624877 | 10.25547685467354 |
| 1525815634000 | 6 | 5 | 0.029623209410135 | 9.7079931640624864 | 10.25475688648455 |
而且我还需要考虑以下情况,我想继续丢弃“完整行”
| timestamp | code | code_2 | q1 | q2 | q3 |
|---|---|---|---|---|---|
| 1525815633939 | 1 | 5 | 0.528285138670663 | 0.0 | -10.2012590087440983 |
| 1525815633979 | 1 | 5 | 0.728820351190643 | 0.0 | -10.1985732939503924 |
| 1525815633990 | 6 | 5 | 9.7439931640624877 | 10.25547685467354 | |
| 1525815633990 | 6 | 5 | 0.92935559526222 | ||
| 1525815634000 | 6 | 5 | 0.984554565478545 | 9.7079931640624864 | 10.25475688648455 |
| 1525815634000 | 6 | 5 | 0.029623209410135 |
【问题讨论】:
-
好吧,我会创建一个函数,它只是选择第一个时间戳并遍历所有时间步以找到等效的时间戳,然后在两个时间戳行中添加 q1、q2、q3,如果其中一个有 NaN,否则对最后一种情况不做任何事情?
-
这确实是一个选择,但我期待更有效的东西。我有加载的数据,这会很慢,你不觉得吗?
-
还有,我期待这可以通过内置的 pandas 方法来完成。
-
嗯,我也很喜欢 :),肯定有一个内置函数,如果两个单元格具有相同的元素,它们可以明确地相加,或者如果其中一个是 NaN,则替换它与其他值。但是对于您的最后一种情况,内置函数如何知道要获得哪个值?喜欢:
df.groupby('TimeStamp')['q1'].sum()以及 q2、q3 等 -
尝试我的解决方案以获得更好的运行时间(另外由于不使用 apply 功能相对较慢)。 stackoverflow.com/a/69055997/7836972
标签: pandas dataframe merge duplicates