Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 基于第一行的固定计数从数据帧获取行_Python_Pandas_Dataframe - Fatal编程技术网

Python 基于第一行的固定计数从数据帧获取行

Python 基于第一行的固定计数从数据帧获取行,python,pandas,dataframe,Python,Pandas,Dataframe,这是我的数据框,有2500行 这是我的数据帧的索引 Index([u'Volume(%)1', u'Height(um)1', u' Area(%)1', u'OffsetX(mm)1', u'OffsetY(mm)1', u'Volume(%)2', u'Height(um)2', u' Area(%)2', u'OffsetX(mm)2', u'OffsetY(mm)2', ... u'Volume(%)499', u'Height(u

这是我的数据框,有2500行

这是我的数据帧的索引

Index([u'Volume(%)1', u'Height(um)1', u' Area(%)1', u'OffsetX(mm)1',
       u'OffsetY(mm)1', u'Volume(%)2', u'Height(um)2', u' Area(%)2',
       u'OffsetX(mm)2', u'OffsetY(mm)2',
       ...
       u'Volume(%)499', u'Height(um)499', u' Area(%)499', u'OffsetX(mm)499',
       u'OffsetY(mm)499', u'Volume(%)500', u'Height(um)500', u' Area(%)500',
       u'OffsetX(mm)500', u'OffsetY(mm)500'],
      dtype='object', length=2500)
我想将所有体积、高度、面积、偏移量x和偏移量行分别分组以进行分析

请提供有关如何进一步操作的帮助

您可以先使用,然后再使用一些聚合,例如
mean

a = pd.Index([u'Volume(%)1', u'Height(um)1', u' Area(%)1', u'OffsetX(mm)1',
       u'OffsetY(mm)1', u'Volume(%)2', u'Height(um)2', u' Area(%)2',
       u'OffsetX(mm)2', u'OffsetY(mm)2'])
df = pd.DataFrame({'a':range(10)}, index=a)
print (df)
              a
Volume(%)1    0
Height(um)1   1
 Area(%)1     2
OffsetX(mm)1  3
OffsetY(mm)1  4
Volume(%)2    5
Height(um)2   6
 Area(%)2     7
OffsetX(mm)2  8
OffsetY(mm)2  9    

a = df.index.str.extract('(Volume|Height|Area|OffsetX|OffsetY)', expand=False)
print (a)
Index(['Volume', 'Height', 'Area', 'OffsetX', 'OffsetY', 'Volume', 'Height',
       'Area', 'OffsetX', 'OffsetY'],
      dtype='object')

df = df.groupby(a).mean()
print (df)
           a
Area     4.5
Height   3.5
OffsetX  5.5
OffsetY  6.5
Volume   2.5

如果要单独提取所有值并创建具有3个级别的
多索引

a = (df.index
      .to_series()
      .str.extract('(Volume|Height|Area|OffsetX|OffsetY)(\(.*\))(\d+)', expand=True))
print (a)
                    0     1  2
Volume(%)1     Volume   (%)  1
Height(um)1    Height  (um)  1
 Area(%)1        Area   (%)  1
OffsetX(mm)1  OffsetX  (mm)  1
OffsetY(mm)1  OffsetY  (mm)  1
Volume(%)2     Volume   (%)  2
Height(um)2    Height  (um)  2
 Area(%)2        Area   (%)  2
OffsetX(mm)2  OffsetX  (mm)  2
OffsetY(mm)2  OffsetY  (mm)  2

df.index = pd.MultiIndex.from_arrays([a[0], a[1], a[2]], names=('a1','b1','c1'))
print (df)
                a
a1      b1   c1   
Volume  (%)  1  0
Height  (um) 1  1
Area    (%)  1  2
OffsetX (mm) 1  3
OffsetY (mm) 1  4
Volume  (%)  2  5
Height  (um) 2  6
Area    (%)  2  7
OffsetX (mm) 2  8
OffsetY (mm) 2  9

非常类似的解决方案,如果需要
索引中的3列

a = (df.index
      .to_series()
      .str.extract('(Volume|Height|Area|OffsetX|OffsetY)(\(.*\))(\d+)', expand=True))
a.columns = ['a1','b1','c1']
print (a)
                   a1    b1 c1
Volume(%)1     Volume   (%)  1
Height(um)1    Height  (um)  1
 Area(%)1        Area   (%)  1
OffsetX(mm)1  OffsetX  (mm)  1
OffsetY(mm)1  OffsetY  (mm)  1
Volume(%)2     Volume   (%)  2
Height(um)2    Height  (um)  2
 Area(%)2        Area   (%)  2
OffsetX(mm)2  OffsetX  (mm)  2
OffsetY(mm)2  OffsetY  (mm)  2

df = a.join(df)
print (df)
                   a1    b1 c1  a
Volume(%)1     Volume   (%)  1  0
Height(um)1    Height  (um)  1  1
 Area(%)1        Area   (%)  1  2
OffsetX(mm)1  OffsetX  (mm)  1  3
OffsetY(mm)1  OffsetY  (mm)  1  4
Volume(%)2     Volume   (%)  2  5
Height(um)2    Height  (um)  2  6
 Area(%)2        Area   (%)  2  7
OffsetX(mm)2  OffsetX  (mm)  2  8
OffsetY(mm)2  OffsetY  (mm)  2  9

将行(或列)单独分组以进行分析就是熊猫所说的

设置示例数据

import pandas as pd, numpy as np

np.random.seed([3,14159])

idx = pd.Index([
    u'Volume(%)1', u'Height(um)1', u' Area(%)1', u'OffsetX(mm)1',
    u'OffsetY(mm)1', u'Volume(%)2', u'Height(um)2', u' Area(%)2',
    u'OffsetX(mm)2', u'OffsetY(mm)2', u'Volume(%)499', u'Height(um)499',
    u' Area(%)499', u'OffsetX(mm)499', u'OffsetY(mm)499', u'Volume(%)500',
    u'Height(um)500', u' Area(%)500', u'OffsetX(mm)500', u'OffsetY(mm)500'],
    dtype='object')

df = pd.DataFrame(np.random.rand(20, 6), idx)
我将采取假设您希望按照括号之前的索引字符串的第一部分进行分组的方法。在这种情况下,我们可以这样做

# split part of split-apply-combine
g = df.groupby(df.index.str.strip().str.split('(', 1).str[0])
现在可用于执行所有正常的分组操作

g.mean()

                0         1         2         3         4         5
Area     0.570096  0.442108  0.483907  0.369207  0.296919  0.504575
Height   0.717268  0.681560  0.584143  0.707477  0.675091  0.519428
OffsetX  0.382745  0.341273  0.583181  0.581414  0.483730  0.389093
OffsetY  0.544904  0.429652  0.226045  0.458973  0.688739  0.499085
Volume   0.526659  0.404874  0.472162  0.618568  0.255428  0.748262
或者使用
agg
进行聚合(我使用下面的
stack
进行显示)


我们可以通过实现
lambda
而不是使用一系列
str
访问器函数来优化分组

g = df.groupby(lambda i: i.strip().split('(', 1)[0])
这不仅更短,而且速度更快

%timeit df.groupby(df.index.str.strip().str.split('(', 1).str[0]).agg(['mean', 'sum', 'max'])
%timeit df.groupby(lambda i: i.strip().split('(', 1)[0]).agg(['mean', 'sum', 'max'])

5.7 ms ± 211 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
5.06 ms ± 94.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
g.agg(['mean', 'sum', 'max']).stack()

                     0         1         2         3         4         5
Area    mean  0.570096  0.442108  0.483907  0.369207  0.296919  0.504575
        sum   2.280386  1.768432  1.935627  1.476826  1.187676  2.018299
        max   0.802345  0.699236  0.885809  0.855904  0.533728  0.596097
Height  mean  0.717268  0.681560  0.584143  0.707477  0.675091  0.519428
        sum   2.869072  2.726240  2.336572  2.829906  2.700365  2.077713
        max   0.922273  0.964951  0.951598  0.922242  0.975507  0.892488
OffsetX mean  0.382745  0.341273  0.583181  0.581414  0.483730  0.389093
        sum   1.530979  1.365093  2.332724  2.325658  1.934922  1.556371
        max   0.933637  0.630542  0.928255  0.944937  0.713851  0.844690
OffsetY mean  0.544904  0.429652  0.226045  0.458973  0.688739  0.499085
        sum   2.179618  1.718607  0.904180  1.835893  2.754955  1.996340
        max   0.923857  0.765601  0.715871  0.818813  0.802785  0.676706
Volume  mean  0.526659  0.404874  0.472162  0.618568  0.255428  0.748262
        sum   2.106637  1.619497  1.888647  2.474271  1.021713  2.993047
        max   0.665079  0.595963  0.726680  0.948864  0.453699  0.940529
g = df.groupby(lambda i: i.strip().split('(', 1)[0])
%timeit df.groupby(df.index.str.strip().str.split('(', 1).str[0]).agg(['mean', 'sum', 'max'])
%timeit df.groupby(lambda i: i.strip().split('(', 1)[0]).agg(['mean', 'sum', 'max'])

5.7 ms ± 211 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
5.06 ms ± 94.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)