関数とそのアプリケーションはまだ新しいのでD
、データフレームの新しい列を作成したいと思います。
df = pd.DataFrame([[1, 2, 3], [1, 3, 5], [4, 6, 7]], columns=['A', 'B', 'C'])
A B C
0 1 2 3
1 1 3 5
2 4 6 7
列D
とその内容は、関数を使用して作成する必要がありますが、私はこの方法について考えています。
def my_func(B, C):
if C > B.shift(1):
df['D'] = 'right'
return df['D']
else:
df['D'] = 'left'
return df['D']
つまり、簡単に言うとC
、の値がB
前の行の値よりも大きい場合、セルは「右」になり、それ以外の場合は「左」になります。実行できません、どういうわけかシフトが受け入れられないか、エラーメッセージが表示されます
シリーズの真理値はあいまいです。a.empty、a.bool()、a.item()、a.any()、またはa.all()を使用します。
このようなタスクに関数を最適に使用し、shift()を適用する方法についてのヘルプを歓迎します。
編集:これは頻繁に使用される手順であるため、私はソリューションの「機能バージョン」を探しています。
あなたが使用することができますnumpy.where
:
df['D'] = np.where(df.C > df.B.shift(), 'left', 'right')
print (df)
A B C D
0 1 2 3 right
1 1 3 5 left
2 4 6 7 left
機能が必要な場合:
def f(B, C):
df['D'] = np.where(C > B.shift(), 'left', 'right')
return df
print(f(df.B, df.C))
A B C D
0 1 2 3 right
1 1 3 5 left
2 4 6 7 left
または:
def f(B, C):
df['D'] = np.where(C > B.shift(), 'left', 'right')
return df.D
print(f(df.B, df.C))
0 right
1 left
2 left
Name: D, dtype: object
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加