-1
いくつかのデータ分析を開始したいと思います。 基本的には、2つの列 '番号'と '日付'があり、両方が数回現れます。私は自分のデータ番号をソートしたいのですが、その後、各番号グループについて、「日付」データをソートします。グループ化されたデータを並べ替えて分析する
最後に、グループの最初の「日付」とクラスタ内の「日付」の違いを示す別の列「dif」を作成します。
しかし、これは私の予想どおりではありません。どうすれば実装できますか?
これは私が今までに得たもので、「番号」列のソートが機能します。
import pandas as pd
import numpy as np
df=pd.ExcelFile('result.xlsx')
df=df.parse(0)
df=df.sort_values(['number'], ascending=True) #sorting
df = df.reset_index(drop=True) #index reset
number=df['number'] #creating number and date
date=df['date']
df['dif']=''
rowcount=len(df.index) #create rowcounting as maximum index
print('rowcount:', rowcount) #17 rows, start with 0 up to 16
print(df) #data is sorted and need to be analzsed
def applyFunc(i):
if number[i] == number [i+1]:
if date[i+1]>date[i]:
return date[i+1]-date[i]
else:
return date[i]-date[i+1]
df['dif']=df.apply(applyFunc)
これは、「日付」がソートされておらず、「dif」列に何も含まれていないデータフレームデータです。
rowcount: 17
number date dif
0 1624 2017-01-06
1 1624 2017-01-07
2 1633 2017-01-05
3 1633 2017-01-08
4 1633 2017-01-14
5 1716 2017-01-02
6 1716 2017-01-04
7 1716 2017-01-04
8 1716 2017-01-09
9 2165 2017-01-10
10 2323 2017-01-07
11 4564 2017-01-13
12 4564 2017-01-11
13 4568 2017-01-12
14 6565 2017-01-05
15 6565 2017-01-06
16 6565 2017-01-09
p.s.私は両方の列のgroupbyとsort_valuesでそれを試してみましたが、うまく動作しませんでした。
素晴らしい感謝です。あなたの2番目のコードを追加すると、2つのエラーが発生します:TypeError:タイプのオブジェクトを変換できません。 pandas.core.series.Series '>をdatetimikeのインデックスに、AttributeError:datetimikeの値で.dtアクセサーを使用することができます。大変感謝します:) –
@MaximilianLöffel最後の行の結果を戻す必要があります。 'df = df.assign(diff = df.groupby( 'number')['date'] \ .apply(ラムダx:x - x.values [0]))それを試しましたか?それがうまくいくならば、投票し、答えを受け入れることを忘れないでください。ありがとう。 –