nanimo_wakaranai
@nanimo_wakaranai

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pandasで値を比較し条件に一致した場合、行を追加する方法(超初心者です)

pandasで値を比較し、条件に一致した場合、行を追加する方法

pandasでのデータ整形でわからないことがあり困っています。😭
超初心者です。

indexのnとn+1を比較して、Xの値が1ずつ増加するようになっていない場合、
その間に行を追加し、欠損を補うようなコードの書き方を教えていただきたいです。
(以下の場合はindexの1と2、3と4の間にそれぞれ3,6が入っていないという欠損があります)


index  X
0      1
1      2
2      4
3      5
4      7

↓こういう形に変形したいです

index  X
0      1
1      2
2      3
3      4
4      5
5      6
6      7

よろしくお願いいたします。

0

2Answer

最初に欠損値を$O(N)$で調べあげて元々のSeriesと結合concatさせたのち,$O(N{\rm log}N)$でsortしてしまう方法であれば

import pandas as pd

s = pd.Series([1, 2, 4, 5, 7], name = "X")
print(s)

missed = list()
for i in range(len(s) - 1):
	if s[i] + 1 != s[i + 1]:
		missed.extend([j for j in range(s[i] + 1, s[i + 1])])

s = pd.concat([s, pd.Series(missed, name = "X")]).sort_values().reset_index(drop = True)
print(s)

このようになります.頑張れば$O(N)$で実装できそうな内容ですが今のところ思いついた実装で最良です.
欠損を見つけるごとに元々のSeriessに追加する実装も考えましたが$O(N^2)$で重そうだったので上の実装になりました.

1Like

Comments

  1. お返事が遅れてしまい失礼いたしました、、!
    ご回答いただいた内容を参考にさせていただき、無事実装が出来ました!
    (実際にはもう少し列の多いデータでしたのでDataFrameの形式にして実装しました)

    とても助かりました、ありがとうございました!

探索して穴埋めなどせずにrange(Min, Max+1)で済むのではないでしょうか。

0Like

Your answer might help someone💌