Python - Pandas 相互の範囲内の列値を持つ行をマージする

okwaves2024-01-25  8

閉まっている。この質問はさらに焦点を絞る必要があります。現在回答を受け付けておりません。

この質問を改善したいですか?この投稿を編集して、1 つの問題のみに焦点を当てた質問を更新してください。

3 年前

に閉鎖されました。

この質問を改善してください

以下に示すようなサンプル データフレームがあります。

   x    y   dx
0  1  6.0  1.1
1  2  6.0  1.5
2  2  6.5  1.2
3  3  7.2  4.3
4  4  7.5  4.5
5  4  8.0  4.7
6  5  1.1  7.0

列 dx の値が互いに 1 の範囲内にある場合、行を結合したいと考えています。重複する範囲はありません。これらの行の 1 つを保持して残りを削除するか、すべての行の平均を取ることができます。したがって、期待される出力は次のようになります。

   x    y   dx
1  1  6.0  1.1
2  3  7.2  4.3
3  5  1.1  7.0

または

   x     y     dx
0  1.67  6.17  1.26
1  3.67  7.57   4.5
2  5     1.1   7.0

これら 2 つのオプションのいずれか、または両方が必要ですか?

– イオアジマス

2020 年 9 月 4 日 22:37

これであなたの質問は解決しましたか?パンダのマージ 101

– トレントン・マッキニー

2020 年 9 月 4 日 22:37

@archer 2 つのいずれでも機能します。ありがとう。

– ビープログラマー

2020 年 9 月 4 日 22:39



------------------------

最初のオプションは次のように指定できます。

import pandas as pd
new_df=df[0:1]
for i in range(1,len(df)):
    if df.dx.iloc[i]-new_df.dx.iloc[-1]>1:
        new_df=pd.concat([new_df, df.iloc[i:i+1,:]], ignore_index=True)

5

問題を正しく反映するためにサンプル データ フレームを変更しました。 1 つの行にすべての整数が含まれる必要はありません。

– ビープログラマー

2020 年 9 月 4 日 22:47

それでは、fi から始めます最初の行、最初の行を保持して dx+1 の範囲内のすべての行を削除し、次に次の行 (dx の値に関係なく) を保持し、その行から dx+1 を持つ次の行を削除したいなどですか?

– イオアジマス

2020 年 9 月 4 日 22:50

はい、その通りです

– ビープログラマー

2020 年 9 月 4 日 22:50

いくつか変更を加えました。答えを確認してください。

– イオアジマス

2020 年 9 月 4 日 23:07

ご承諾いただきありがとうございます。おそらく賛成票も?よろしく

– イオアジマス

2020 年 9 月 4 日 23:09



------------------------

これを試してください

df_final = df.groupby((df.dx.diff().abs() > 1).cumsum(), as_index=False).first()

Out[288]:
   x    y   dx
0  1  6.0  1.1
1  3  7.2  4.3
2  5  1.1  7.0

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。