Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于三列(或更多列)中的键搜索treshold值_Python_Excel_Csv_Pandas - Fatal编程技术网

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

Python 基于三列(或更多列)中的键搜索treshold值,python,excel,csv,pandas,Python,Excel,Csv,Pandas,我需要有关如下数据集的帮助: 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

我需要有关如下数据集的帮助:

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
我想要实现什么

我有一个空间点的样本,这一点用三个词来描述,在这种情况下,让我们以Alon Walon Balon为例: 我想将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})
df=df.groupby[['Name1','Name2','Name3','Temp','Height']].size().reset_index()
访问量=()
cntSpot=0
过温=0
超高=0
对于len中的i(df):
name1=str(df.get_值(i,'name1'))
name2=str(df.get_值(i,'name2'))
name3=str(df.get_值(i,'name3'))
如果访问中的str(name1+name2+name3):
cntSpot+=1
如果df.get_值(i,'Temp')>105:
过温+=1

如果df.get_value(i,'Height)这里有一个解决方案,它使用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())

编辑了答案,简化了代码。现在应该更干净了。向我解释得很好。非常感谢:)很高兴有帮助。如果这能解决您的问题,请向上投票并接受答案:)我现在不能向上投票,当我的声誉超过15分时,我会:)我会在一分钟内测试好的,我找到了解决方案。高度=分组。应用(λx:x[x['height'].isin(范围(12,32)))。形状[0])。再次感谢:)
                  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