0

各列の行の大部分が null ( None) である巨大なテーブルをクエリしました (それぞれidに複数の行がありますid)。これらを押しつぶしたいので、1行につき1行にしますid

入力のモック例を提供します。

    id  var1  var2
0   1  None  None
1   1  None     x
2   2  None     k
3   3  None  None
4   1  None  None
5   1     y   NOT
6   3     p  None
7   2    ss  None
8   2  None  None

出力のモック例は次のとおりです。

    id var1  var2
0   1    y     x
1   2   ss     k
2   3    p  None

"NOT"の 2 番目の非 null 値であるため、 from var2column がどのように作成されなかったかに注意してくださいid==1

次のスニペットは、各 ID に値が 1 つしかない場合に機能します。

df = df.set_index('id')
cs = [df[col].dropna() for col in df]
pd.concat(cs, axis=1)

ただし、複数の値がある場合 (NOT例のように)、これはエラーをスローします。

各列の最初の非 null 値を集計する簡単な方法はありますidか? ありがとう。

これが pandas データフレームのモック例です。実際のデータフレームにはさらに多くの列と行があります。

df = pd.DataFrame([[1, None, None],[1, None, "x"],[2, None, "k"],[3,None, None], [1, None, None], [1, "y", "NOT"], [3, "p", None], [2, "ss", None], [2, None, None]])
4

2 に答える 2