目的:エクセルで行ってきた表計算的な作業をPythonでやりたい
今までエクセルで行ってきた「セルを相対参照して取得した計算の結果を新しいセルに書き込む」という作業をPythonのDataFrameで行いたいのですがとりあえず買ってきたオライリーの本やgoogle検索では上手く解決できませんでした。初歩的な操作だとは思うのですが、適切な質問の仕方もまだ分からないレベルなのでご容赦下さい。
やりたいこと
エクセルの時にif関数と相対参照で書いたものをすべての行に対してオートフィルで書き込んでいた処理をPythonのDataframeに対して行うことが目的です。
エクセルでは次のような式をオートフィルですべての行に書き込んでいました。
簡単にいうと「隣接する2つの行の日付とidが一致する場合時刻の差を下側の行に追加する、一致しない場合はNAとする」という処理をしています。
=if(AND(yyyymmdd1=yyyymmdd2,id1=id2),hhmm2-hhmm1,"") #実際にはyyyymmdd1やid1の部分にはセル番号が相対参照で入っています
Pythonだとapply()を使えばDataFrameやSeries内のValueに関数を適用できるところまでは分かったのですが、エクセルでいう相対参照はどう記述すればいいのか、どのようなアプローチをとればいいのか分かりません。
###具体例
上記の式は日付、時刻、個人番号が記録されたログから各個人が1回の作業に消費した時間を算出する際に使用していました。
下の表は元々は時系列順に記録されていたものを個人番号>日付>時刻の順にソートしたものです。
yyyymmdd | hhmm | id |
---|---|---|
20190101 | 9:00 | 1111 |
20190101 | 9:15 | 1111 |
20190101 | 9:30 | 1111 |
20190101 | 9:45 | 1111 |
20190202 | 9:00 | 1111 |
20190202 | 9:15 | 1111 |
20190202 | 9:30 | 1111 |
20190202 | 9:45 | 1111 |
20190101 | 9:00 | 2222 |
20190101 | 9:10 | 2222 |
20190101 | 9:20 | 2222 |
20190101 | 9:30 | 2222 |
20190101 | 9:40 | 2222 |
20190202 | 9:00 | 2222 |
20190202 | 9:10 | 2222 |
20190202 | 9:20 | 2222 |
20190202 | 9:30 | 2222 |
20190202 | 9:40 | 2222 |
この表に対してmim_per_productという列を追加して先ほどの式をオートフィルしたものがこちらになります。
yyyymmdd | hhmm | id | min_per_product |
---|---|---|---|
20190101 | 9:00 | 1111 | NaN |
20190101 | 9:15 | 1111 | 15 |
20190101 | 9:30 | 1111 | 15 |
20190101 | 9:45 | 1111 | 15 |
20190202 | 9:00 | 1111 | NaN |
20190202 | 9:15 | 1111 | 15 |
20190202 | 9:30 | 1111 | 15 |
20190202 | 9:45 | 1111 | 15 |
20190101 | 9:00 | 2222 | NaN |
20190101 | 9:10 | 2222 | 10 |
20190101 | 9:20 | 2222 | 10 |
20190101 | 9:30 | 2222 | 10 |
20190101 | 9:40 | 2222 | 10 |
20190202 | 9:00 | 2222 | NaN |
20190202 | 9:10 | 2222 | 10 |
20190202 | 9:20 | 2222 | 10 |
20190202 | 9:30 | 2222 | 10 |
20190202 | 9:40 | 2222 | 10 |
このような処理をPython上で実現するにはどのようなアプローチをすれば良いのでしょうか。
試したこと
オライリーのPythonによるデータ分析入門、前処理大全などは買って読んでみたのですが適用できそうな処理が見つかりませんでした。
もし有用な書籍情報などありましたら教えていただけると幸いです。
補足情報(FW/ツールのバージョンなど)
エディタにはJupyter notebookを使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/30 06:16
2019/09/02 02:09
2019/09/05 13:19