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