熊猫:遍历分组数据中的行,并根据条件是否执行某些操作

时间:2020-01-28 05:13:20

标签: python pandas

我有以下格式的分组数据帧:

     TC      lbl     date 
101  101       f      28-12-2017
     101       f      27-08-2019
     101       m      12-04-2013
     101       m      25-06-2015
     101       f      16-08-2016

102  102       m      15-08-2019
     102       m      25-06-2019

例如,对于组101,遍历列['lbl']

for (columnName, columnData) in r.iteritems():
    if ['lbl'][i]==['lbl'][i+1] & ['lbl'][i+1]=='f':
        r.diff(['date'][i],['date'][i+1])=['date'][i+1]
    elif ['lbl'][i]==['lbl'][i+1] & ['lbl'][i+1]!='f':
        ['date'][i+1]=['date'][i+1]
    elif ['lbl'][i]!=['lbl'][i+1] & ['lbl'][i+1]=='f':
        r.diff(['date'][i],['date'][i+1])=['date'][i+1]
    else:
        if ['lbl'][i]!=['lbl'][i+1] & ['lbl'][i+1]!='f':
            ['date'][i+1]=['date'][i+1]

需要在组内部进行操作,即即使['lbl']发生变化,连续的组之间也不需要交互。有可能吗?

输出数据帧必须为:

          TC      lbl     date 
 101     101       f      28-12-2017
         101       f      607 days
         101       m      12-04-2013
         101       m      25-06-2015
         101       f      418 days
 102     102       m      15-08-2019
         102       m      25-06-2019

1 个答案:

答案 0 :(得分:1)

以下对我有用:

<?php

namespace App\Http\Controllers;

use App\Pack;
use App\City;
use Illuminate\Http\Request;
use App\Http\Requests\PackRequest;

class PacksController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $packs = Pack::latest()->paginate(5);
        return view('packsmaster.index', compact('packs'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $pack = new Pack();
        return view('packsmaster._create', compact('pack'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(PackRequest $request)
    {
        // $request->user()->packs()->create($request->only('pack_name'));
        // return redirect('packs')->with('success', "your data has bee saved!!");
        $request->user()->packs()->create($request->only('pack_name'));
        return redirect('packs')->with('success', "your pack has been saved!!");
    }

现在的数据是:

import pandas as pd
import datetime
data = pd.DataFrame(data=[[101,'f',datetime.date(2017,12,28)],
                         [101, 'f', datetime.date(2019,8,27)],
                         [101,'m',datetime.date(2013,4,12)],
                         [101,'m',datetime.date(2015,6,25)],
                         [101, 'f', datetime.date(2016,8,16)],
                         [102,'m', datetime.date(2019,8,15)],
                         [102,'m',datetime.date(2019,6,25)]],
                  columns=["TC", "lbl", "date"])

for i in data.index[1:]:
    if (data.at[i, 'lbl'] == data.at[i-1, 'lbl']) & (data.at[i, 'lbl'] == 'f'):
        data.at[i, 'date'] = data.at[i, 'date'] - data.at[i-1, 'date']
    elif data.at[i, 'lbl'] == 'f':
        data.at[i, 'date'] = data.at[i, 'date'] - data.at[i-1, 'date']

编辑: 这适用于具有MultiIndex的DataFrame

        TC    lbl                   date 
0      101      f             2017-12-28
1      101      f      607 days, 0:00:00
2      101      m             2013-04-12
3      101      m             2015-06-25
4      101      f      418 days, 0:00:00
5      102      m             2019-08-15
6      102      m             2019-06-25