我需要有关数据集的帮助,如下所示:
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})
现在我有一组字典,其中包含每个地点超过特定值的次数。 这是我需要的信息,一个Spot的情况发生了多少次。 诀窍在哪里? csv文件超过2GB,我需要非常快速地处理它。
答案 0 :(得分:1)
这是一个使用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