私は次のpandasデータフレームを持っています:
import pandas as pd
data = {'one' : pd.Series([1.], index=['a']), 'two' : pd.Series([1., 2.], index=['a', 'b']), 'three' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(data)
df = df[["one", "two", "three"]]
one two three
a 1.0 1.0 1.0
b NaN 2.0 2.0
c NaN NaN 3.0
d NaN NaN 4.0
要素を列ごとに上/下にシフトする方法を知っています。
df.two = df.two.shift(-1)
one two three
a 1.0 2.0 1.0
b NaN NaN 2.0
c NaN NaN 3.0
d NaN NaN 4.0
ただし、行a
のすべての要素を2列にシフトし、行b
のすべての要素を1列にシフトしたいと思います。最終的なデータフレームは次のようになります。
one two three
a NaN NaN 1.0
b NaN NaN 2.0
c NaN NaN 3.0
d NaN NaN 4.0
パンダでこれをどのように行うのですか?
DF
操作を実行するために、列名として行ラベルにアクセスする方法があるように、最初のshift
を転置することができます。
それぞれの列の内容をそれらの量だけ下にシフトし、再転置して目的の結果を取得します。
df_t = df.T
df_t.assign(a=df_t['a'].shift(2), b=df_t['b'].shift(1)).T