我有以下格式的分组数据帧:
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
答案 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