10単位の観測を含む時系列データセットがあります。毎日、観察の各単位は、何時間も活動に従事することがあります。したがって、DataFrame には (たとえば) 4 つの変数があります。
日付 - 日付 単位 - 観察の単位 活動 - いくつかの活動 CumHours - 単位が活動に費やした累積時間数。
毎日、各行ごとに活動に費やされた時間数を示す「Hours_calc」変数を作成する必要があります。すべての通常のビットをインポートした後、私はこれを行います:
DF = (mydata, columns = ['Date', 'Unit', 'Activity', 'CumHours'])
DF['Hours_calc'] = np.nan
DFGrouped = DF.groupby(['Unit', 'Activity'])
transform メソッドが必要だと思います。transform 関数に渡される最初の引数 (指定されている) は、agg() メソッドと同様に一連の DF 列であると思います。そうですか?
私は次の関数を書きましたが、ご覧のとおり、計算のために DF を参照する必要があるのか、DFGrouped を参照する必要があるのか 、それとも何を参照する必要があるのか わかりません。一般に、グループ化されたデータ内の行/列を参照する方法は? また、groupby グループと同じ長さのシリーズを返そうとするのは正しいでしょうか?
def WorkingHours(x, Column):
LISTHOURS = []
for row in xrange(1, len(x)):
Tot = int(DFGrouped[Column][row]) - int(DFGrouped[Column][row - 1])
LISTHOURS.append(Tot)
return pd.Series(LISTHOURS)
TESTDF = DFGrouped.transform({Hours_calc : lambda x : WorkingHours(x, 'CumHours')})
また、変換する Dict を渡すことについてのドキュメントには何も表示されていませんが、グループ内の 1 つの変数/列のみで関数を実行する他の方法は見当たりません。
どこが間違っていますか?エラーメッセージは長くて紛らわしいですが、「データ型に対して無効な変換関数」で終わります