私はRのdata.table
でもっと経験がありますが、pandas
を学ぼうとしています。 dt_m_summary
に表示され、device_id
とcategory
だけでなく、pandas:複数のgroupby-apply操作を行うには
> head(dt_m)
event_id device_id longitude latitude time_ category
1: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
2: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
3: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
4: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
5: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
6: 1004583 -100015673884079572 NA NA 1970-01-01 06:34:52 1 free
app_id is_active
1: -5305696816021977482 0
2: -7164737313972860089 0
3: -8504475857937456387 0
4: -8807740666788515175 0
5: 5302560163370202064 0
6: 5521284031585796822 0
dt_m_summary <- dt_m[,
.(
mean_active = mean(is_active, na.rm = TRUE)
, median_lat = median(latitude, na.rm = TRUE)
, median_lon = median(longitude, na.rm = TRUE)
, mean_time = mean(time_)
, new_col = your_function(latitude, longitude, time_)
)
, by = list(device_id, category)
]
新しい列(new_col
経由mean_active
):data.table
で、私はこのような何かを行うことができます。私はGROUPBY-適用の結果を持って新しい列をしたい場合、私はまた、元のテーブルに似たby
変換を行うことができます:
dt_m[, mean_active := mean(is_active, na.rm = TRUE), by = list(device_id, category)]
(場合には、私が望んでいた、例えば、mean_active
行を選択しますいくつかのしきい値よりも大きいか、何か他のことをする)。
私はgroupby
がpandas
にあることを知っていますが、私は上記のような簡単な変換の方法を見つけていません。私が考えることができる最高のものは、一連のgroupby-applyを実行してから、結果を1つのdataframe
にマージすることでしたが、それは非常にぎこちないようです。それをする良い方法はありますか?
ラムダを忘れないでください。'new_col = your_function(latitude、longitude、time_)' – Alexander
それで、 'my_function'を複数の引数をとって呼び出すのはどのようになりますか?長い束線の関数であると想像してください。 –
私が見ている問題は、私の仕事では、ある機能によって変換される変数が1つしかないことはめったにありません。私は通常、Aのみの合計を見つける必要はありません。私は多分データのいくつかの列を取る機能を持っています。次に、その関数の結果を(XとYに似た)集計行に適用して、列を何と呼ぶかを選択する必要があります。私は新しいデータフレームで列を事前に生成しなければならないと言っていますか...何ですか? –