对python数据帧进行分段以在每个段中运行函数

时间:2017-04-27 23:56:32

标签: function dataframe multi-index

我试图运行一个适用于我的数据集的功能(差不多)。事实是,当我使用我的整个数据框时,我的功能不起作用。 数据框的标题如下:

<div class="modal">
  <div class="container">
   <div class="row">
    <div class="col-sm-3">
      <div class="row">
        <div class="col-sm-12">
          <div class="panel">
          </div><!--end panel-->
        </div><!--end col-->
      </div><!--end row-->
    </div><!--end col-->
    <!--include column here with row and column children and panel-->
    <!--include column here with row and column children and panel-->
  </div><!--end row-->
  </div><!--end container-->
</div><!--end modal-->

如何分割或拆分我的DataFrame以告诉python运行读取个人ID集的函数?然后转到下一个等等

更新:我的功能有以下参数:

           ID   POSITION_X  POSITION_Y  POSITION_T
0           0     116.231     114.277           0
1           0     116.131     114.376           1
2           0     116.189     114.364           2
3           1     116.150     114.398           0
4           1     116.271     114.375           1
5           2     116.157     114.296           0
6           2     116.220     114.384           1
7           2     116.221     114.280           2
8           2     116.277     114.489           3
9           3     116.172     114.237           0

并且该函数调用了一些参数并在相应的列中使用[&#39; POSITION_X&#39;,&#39; POSITION_Y&#39;],如下所示:

N = df1.groupby('ID').size()          
max_time = N*(0.1)
frames = max_time/N
t_step=frames.item()



data = pd.DataFrame({'N':N,'max_time':max_time,'frames':frames})

print(data)

t=np.linspace(0.1, max_time.item(), N)

如果我在个人ID数据集上运行该功能,它的效果非常好!!但是如何指示为每组ID重复该功能?

1 个答案:

答案 0 :(得分:0)

您可以使用pandas.groupbyapply()在各个群组上运行以下功能:

<强>代码:

def apply_to_group(group):
    return (group['ID'] * 100) + group['POSITION_T']

df.groupby(['ID']).apply(apply_to_group)

测试代码:

import pandas as pd
df = pd.read_fwf(StringIO(u"""
    ID   POSITION_X  POSITION_Y  POSITION_T
    0     116.231     114.277           0
    0     116.131     114.376           1
    0     116.189     114.364           2
    1     116.150     114.398           0
    1     116.271     114.375           1
    2     116.157     114.296           0
    2     116.220     114.384           1
    2     116.221     114.280           2
    2     116.277     114.489           3
    3     116.172     114.237           0"""),
                 header=1)

def apply_to_group(group):
    return (group['ID'] * 100) + group['POSITION_T']

print(df)
print(df.groupby(['ID']).apply(apply_to_group))

<强>结果:

   ID  POSITION_X  POSITION_Y  POSITION_T
0   0     116.231     114.277           0
1   0     116.131     114.376           1
2   0     116.189     114.364           2
3   1     116.150     114.398           0
4   1     116.271     114.375           1
5   2     116.157     114.296           0
6   2     116.220     114.384           1
7   2     116.221     114.280           2
8   2     116.277     114.489           3
9   3     116.172     114.237           0

ID   
0   0      0
    1      1
    2      2
1   3    100
    4    101
2   5    200
    6    201
    7    202
    8    203
3   9    300
dtype: int64