根据三列(或更多)的密钥search阈值
我需要帮助像这样的数据集:
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})
现在我有一套词典,每一个点都有多less次超过一定的数值。 这是我需要的信息,一个Spot发生多less次的情况。 诀窍在哪里? csv文件超过2GB,我需要快速处理它。
这是一个解决scheme,使用pandasgroupby,肯定比循环更有效率。
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
- Oracle – 后台处理为CSV文件,但Excel将“$ 10,000”分成两列
- 无法读取/打开/或对CSV文件python 3.4窗口做任何事情
- 如何在Python中closures并保存完全打开的文件?
- 将多行CSV文件导入到Excel中
- 使用Excel转义CSV文件中的引号和分隔符
- 如何根据使用C#的CSV文件中的列find并列出重复的行。 匹配/分组行。
- Excel 2010 – 将单个XSLM导出到多个CSV文件
- 时间戳格式dd / mm / yyyy hh:mm:ss到yyyy-mm-dd hh:mm:ss – MySQL
- Excel 2010 – 将数据透视表的数据源从外部更改为工作簿中的工作表