次のコードは、値-1、0または1でランダムなデータフレームを作成します。パンダを使用して条件付き累積合計で新しい列を作成するにはどうすればよいですか?
df = pd.DataFrame(np.random.randint(-1,2,size=(100, 1)), columns=['val'])
print(df['val'].value_counts())
のは、それが含まれているか見てみましょう:私はと呼ばれる新しい列を作成しようとしている、
-1 36
0 35
1 29
Name: val, dtype: int64
その後ヴァル= 1とmysum> = 0、次いでmysum = mysum + 1場合
- :次の規則に従って累積条件和と
場合ヴァル= 1とmysum < 0、次いでmysum = mysum + 2
場合ヴァル= -1とmysum < = 0、次いでmysum = mysum - 1
場合ヴァル= -1とmysum> 0、次いでmysum = mysum - 2
valは= 0とmysum < 0の場合、mysum = mysum + 1
valは= 0とmysum> 0の場合、mysum = mysum - 1
val = 0かつmysum = 0の場合は、mysum = mysumです。
だから私はのように単純ではありません怖い:
df['mysum'] = 0
df['mysum'] = np.where((df['val'] == 1) & (df['mysum'].cumsum() >= 0), (df['mysum'].cumsum() + 1), df['mysum'].cumsum())
df['mysum'] = np.where((df['val'] == 1) & (df['mysum'].cumsum() < 0), (df['mysum'].cumsum() + 2), df['mysum'].cumsum())
df['mysum'] = np.where((df['val'] == -1) & (df['mysum'].cumsum() <= 0), (df['mysum'].cumsum() - 1), df['mysum'].cumsum())
df['mysum'] = np.where((df['val'] == -1) & (df['mysum'].cumsum() > 0), (df['mysum'].cumsum() - 2), df['mysum'].cumsum())
df['mysum'] = np.where((df['val'] == 0) & (df['mysum'].cumsum() > 0), (df['mysum'].cumsum() - 1), df['mysum'].cumsum())
df['mysum'] = np.where((df['val'] == 0) & (df['mysum'].cumsum() < 0), (df['mysum'].cumsum() + 1), df['mysum'].cumsum())
print(df['mysum'].value_counts())
print(df)
をしかし、列mysum
が蓄積されていません。だから私は、次のことを試してみました
df['mysum'] = df['val'].cumsum()
!ここで
はあなたが試すことができますフィドルです: https://repl.it/FaXZ/8は
mysumと現在のvalの両方が0の場合、mysumに何が起こりますか? –
私は実現しなかった!私もこのcasuisticを追加しました!ありがとうございました – harrison4
(ループするソリューションを投稿することはお勧めできません...) – ntg