基于三列(或更多列)中的键搜索treshold值

2024-05-16 01:51:47 发布

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

我需要以下数据集的帮助:

Name1   Name2   Name3   Temp    Height
Alon    Walon   Balon   105     34  ]
Alon    Walon   Balon   106     42  |
Alon    Walon   Balon   105     33  ]-- Samples of Spot: Alon-Walon-Balon
Alon    Walon   Kalon   101     11  ]
Alon    Walon   Kalon   102     32  ]-- Samples of Spot: Alon-Walon-Kalon
Alon    Talon   Balon   111     12  ]-- Samples of Spot: Alon-Talon-Balon
Alon    Talon   Calon   121     10  ]-- Samples of Spot: Alon-Talon-Calon

我想要实现什么?你知道吗

我有一个空间点的样本,这一点用三个词来描述,在这种情况下,让我们以阿隆·瓦隆·巴隆为例: 我想将Temp中的每个值与其他值(如105)进行比较,如果该值高于105,则将其保存到另一列。 身高也一样。你知道吗

我现在是怎么做的?你知道吗

df = df.groupby[['Name1','Name2','Name3','Temp','Height']].size().reset_index()
visited = ()
cntSpot = 0
overValTemp = 0
overValHeight = 0
for i in len(df):
    name1 = str(df.get_value(i,'Name1'))
    name2 = str(df.get_value(i,'Name2'))
    name3 = str(df.get_value(i,'Name3'))
    if str(name1+name2+name3) in visited:
        cntSpot+=1
        if df.get_value(i,'Temp')>105:
            overValTemp+=1
        if df.get_value(i,'Height)<13:
            overValHeight+=1
        a = str(name1+name2+name3)
        visited.update({a:cntSpot,overValemp,overValHeight})

现在我有了一套字典,里面有每个点超过某个值多少次的信息。 这是我需要的信息,一个地点发生了多少次。 诀窍在哪里? csv文件超过2GB,我需要以难以置信的速度处理它。你知道吗


Tags: ofdfgetvaluetempsamplestalonstr
1条回答
网友
1楼 · 发布于 2024-05-16 01:51:47

这是一个使用pandas groupby的解决方案,它肯定比循环更有效。你知道吗

grouped = df.groupby(('Name1', 'Name2', 'Name3'))

count = grouped.size()
temp = grouped.apply(lambda x: x[x['Temp']>105].shape[0])
height = grouped.apply(lambda x: x[x['Height']<13].shape[0])

result = pd.concat([count, temp, height],
                   keys = ['Count', 'overValTemp', 'overValHeight'],
                   axis = 1)
result.index = map(lambda x: "-".join(x), result.index.tolist())

结果如下:

                  Count  overValTemp  overValHeight
Alon-Talon-Balon      1            1              1
Alon-Talon-Calon      1            1              1
Alon-Walon-Balon      3            1              0
Alon-Walon-Kalon      2            0              1

相关问题 更多 >