在Pandas Dataframes中切片并比较元素

时间:2017-03-20 18:53:15

标签: python pandas numpy

早晨。最近我一直试图在为机器学习创建大数据表时实施pandas(我试图尽可能地摆脱numpy)。

然而 - 我遇到了一些问题 - 即切片大熊猫日期框架 即 - 我想返回我指定的行并引用并将特定元素与其他数组中的元素进行比较 - 这里是我实现的一些少量代码和一些大纲

import pandas as pd
import csv
import math
import random as nd
import numpy

#create the pandas dataframe from my csv. The Csv is entirely numerical data    
#with exception of the first row vector which has column labels 

df=pd.read_csv(r"C:\Users\Python\Downloads\Data for Brent - Secondattampatatdfrandomsample.csv")

#I use panda functionality to return a random sample of the data (a subset 
#of the array) 
df_sample=pd.DataFrame.sample(df,10)

此时我想将每个行向量的第一个元素与原始数据进行比较。具体来说,任何行中的第一个元素都包含一个id号。 如果原始数据框和样本框的元素匹配,则计算具有匹配ID编号的关联列元素的3个月和6个月平均值

我想放弃我很舒服地转移到numpy并远离pandas - 但是有一些训练模型方法我在pandas听到了很多好事(我的训练是事物的数学方面,而不是程序开发)。谢谢你的意见!

编辑:这是数据框中前11个行向量的示例输入(id,year,month,x,y,z)             id年月x y z     0 2 2016 2 1130 343.627538 163660.060200     1 2 2016 4 859 913.314513 360633.159400     2 2 2016 5 931 858.548056 93608.190030     3 2 2016 6 489 548.314860 39925.669950     4 2 2016 7 537 684.441725 80270.240060     5 2 2016 8 618 673.887072 124041.560000     6 2 2016 9 1030 644.749493 88975.429980     7 2 2016 10 1001 543.312870 54874.599830     8 2 2016 11 1194 689.053707 79930.230000     9 2 2016 12 673 483.644736 27567.749940     10 2 2017 1 912 657.716386 54590.460070     11 2 2017 2 671 682.007537 52514.580380

这里是如何在给定N个n元组的情况下返回样本数据的方式。我使用原生熊猫函数从近9000个条目中返回10个行向量的随机生成子集

         2  2016   1  633  877.9282175   75890.97027
5185  2774  2016   4  184   399.418719   9974.375000
9441  4974  2017   2  239   135.520851      0.000000
5134  2745  2017   2  187   217.220657   7711.333333
8561  4063  2017   1  103   505.714286  18880.000000
3328  2033  2016  11  118   452.152542   7622.000000
3503  2157  2016   3  287   446.668831   8092.588235
5228  2791  2016   2  243   400.166008  12655.250000
9380  4708  2017   2  210   402.690583   5282.352941
1631  1178  2016  10   56   563.716667  16911.500000
2700  1766  2016   1   97   486.764151   6449.625000

1 个答案:

答案 0 :(得分:0)

  

我想解析样本数组中的相应位置,以搜索原始数组中的相同元素,并计算平均值(最终更严格的统计建模)到相关的数值数据

for id in df_sample['id'].unique():
    df.groupby('id').mean()[['x', 'y', 'z']].reset_index()

我不确定这是否正是你想要的,但我会仔细研究它是否能给你提供想法。对于示例中的每个唯一id(我为所有这些实现了它,实现您喜欢的任何检查),我将原始数据框分组为id(所有带id == 2的行都被刷了并且根据需要获取结果pandas.GroupBy对象的平均值(对于每个不在groupby调用中的列,平均对齐的行)。由于这也平均了你的月份和年份,而我认为我关心的是x,y和z,我选择了这些列,然后出于审美目的重置索引。

或者,如果您想要原始id中每个year的{​​{1}}的平均值,则可以

df