3
現在、単一のpanadas DataFrame行を複数のわずかに変更された行に分割する効率的な方法を見つけようとしています。このような構造を想像:パンダでDataFrame行を分割する
A C1 C2 C3 C4
1 a b c a
2 b a e b a
3 g c
4 d e
と私はそのような構造で終わるしたい:
A C
1 a b
2 a c
3 a a
4 b a
5 b e
6 b b
7 b a
8 g c
9 d e
10 d e
これまでのところ、私はループに使用して、そのような辞書を作成してきた(DFが私のデータフレームです):
rows = []
for i, r in df.iterrows():
tmp = r[1:].dropna()
for c in tmp.values:
dict = {'A': r[0], 'C': c}
rows.append(dict)
残念ながら、このアプローチは非常に遅いです。これまでのところ、パンダを使って作業した後、実行時間を大幅に改善することができますが、このケースをより速くする方法を理解するための多くの経験はありません。
これをスピードアップするために何かアドバイスできますか?
をいただき、誠にありがとうございます素晴らしい答え。私はすべての 'C *'列を選択するためのアプローチをいくつか作成しました: 'pdmelt(df、id_vars = 'A'、value_vars = list(df.columns [1:])、value_name = 'C' 'A'、 'C']]。dropna() '。それは私が推測するより普遍的なアプローチです。 – sebap123
@ sebap123、はい、それは良く見えますが、この列のセットでは機能しません: '['C1'、 'A'、 'C2'、C3 '、...]' – MaxU
私は全く同意します。しかし、このような場合は、おそらく 'list(df.columns [0])+ list(df.columns [2:])'を実行します。 – sebap123