🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1094閲覧

diffでグループごとに座標を集計したいのですが、うまくいきません。

S.S.2020

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/16 10:26

人間ごとの移動距離の合計を算出したいです。
データフレームには人間A,Bの座標がそれぞれ記録されていています。Aは(10,100,1),(20,200,2),(30,250,3),(40,300,4)と移動し、Bは(50,150,5),(60,200,6),(70,400,7)と移動します。A,Bそれぞれの移動距離を出すために、まずdiffでグループごとにx軸、y軸、z軸の差をとって、そこから距離を出そうと考えたのですが、diffをとった時点でgroup(人)のデータがなくなっていまい、グループ化できなくなり最初でつまずいてしまいました。グループごとの移動距離を出す何かいい方法がありますでしょうか。

行った処理は以下です。

import pandas as pd
import numpy as np

df = pd.DataFrame({
'人': ['A', 'A', 'A', 'A', 'B', 'B', 'B'],
'x座標': [10, 20, 30, 40, 50, 60, 70],
'y座標': [100, 200, 250, 300, 150, 200, 400],
'z座標': [1, 2, 3, 4, 5, 6, 7]
})
df

df.groupby("人").diff(axis = 0)

diffを行った時点で一番左のカラムが"人"ではなく、連番になってしまい、グループが消えてしまいます。
グループごとの移動距離を出すための方法はありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/02/16 11:02

そのデータに対して、どのような結果をお望みでしょうか? データの並びは同じ人の分は必ず連続してますか? また、A さんのデータが途中で飛んでるとかは考慮しなくて大丈夫でしょうか? いずれにせよ、まずグループ分けしてから diff を取るべとがいいと思います。
S.S.2020

2021/02/16 11:27

座標から座標のユークリッド距離の総和を、Aさん、Bさんそれぞれで出すことが目的です。データは連続していて、AさんとBさんが入り乱れることもなく、空欄もありません。
guest

回答1

0

ベストアンサー

下記ではどうでしょうか?

python

1pd.concat([df['人'], df.groupby("人").diff(axis = 0)], axis=1) 2# 人 x座標 y座標 z座標 3#0 A NaN NaN NaN 4#1 A 10.0 100.0 1.0 5#2 A 10.0 50.0 1.0 6#3 A 10.0 50.0 1.0 7#4 B NaN NaN NaN 8#5 B 10.0 50.0 1.0 9#6 B 10.0 200.0 1.0

投稿2021/02/16 11:17

meg_

総合スコア10736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問