当同一id同时具有正值和负值时,从id中选择正值

2024-10-02 02:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

screenshot我有一张桌子。第一行是id,第二行是value。这张桌子有许多行。我只想有一个唯一的id值。如果同一个id同时具有负值和正值,我将选择正值(1)并删除负值(0)。请参见屏幕截图。如果您能给我任何解决方案,无论是使用R、Python还是Postgresql,我都会很高兴。谢谢你的帮助!你知道吗

hadm_id rass_v
100001    0
100003    0
100003    1
100006    0
100006    1
100007    0
100007    1
100009    0
100009    1
100010    0
100010    1
100011    0
100011    1

Tags: id屏幕valuepostgresql解决方案screenshot桌子负值
3条回答

在R

aggregate(rass_v~hadm_id, df, max)
#   hadm_id rass_v
# 1  100001      0
# 2  100003      1
# 3  100006      1
# 4  100007      1
# 5  100009      1
# 6  100010      1
# 7  100011      1

欢迎来到SO!你知道吗

以下是使用R的几种可能性之一:

df <- data.frame(
     hadm_id = c(100001, 100003, 100003, 100006, 100006, 100007, 100007,
                 100009, 100009, 100010, 100010, 100011, 100011),
      rass_v = c(0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
)
# Edit: for better readability please use @Moody_Mudskipper's answer:    
# df <- setNames(aggregate(df$rass_v, by = list(df$hadm_id), max), names(df))
df <- aggregate(rass_v~hadm_id, df, max)

print(df)

详见this。你知道吗

这是一个更快的数据表解决方案(对于较大的表):

library(data.table)
DT <- data.table(
     hadm_id = c(100001, 100003, 100003, 100006, 100006, 100007, 100007,
                 100009, 100009, 100010, 100010, 100011, 100011),
      rass_v = c(0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
)

DT <- DT[DT[, .I[which.max(rass_v)], by=hadm_id]$V1]
print(DT)

请看这个相关的question和Arun的答案。你知道吗

结果:

   hadm_id rass_v
1:  100001      0
2:  100003      1
3:  100006      1
4:  100007      1
5:  100009      1
6:  100010      1
7:  100011      1

编辑:以下是等效方法:

import pandas as pd
df = pd.DataFrame({'hadmid': [100001, 100003, 100003, 100006, 100006, 100007, 100007,
                 100009, 100009, 100010, 100010, 100011, 100011],
                 'rass_v': [0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]})

df = df.groupby(['hadmid'], sort=False)['rass_v'].max()

print(df)

您可以使用熊猫:

import pandas as pd

d = {'hadmid': [1, 1, 2], 'rass_v': [3, -3, 4]}
df = pd.DataFrame(data=d)

boolean_mask = df.rass_v > 0
df = df[boolean_mask]

相关问题 更多 >

    热门问题