Vielen Dank für die Vorschläge unten, ich habe meine Frage geändert, um es deutlicher zu machenPython Pandas Valueerror
Ich habe einen Datenrahmen (bp) mit einer Waage sowie die (jährlich) Sammlungen in den Spalten 1 bis 6.
import pandas as pd
bp = pd.DataFrame({'Balance': {0: 20000, 1: 2000, 2: 7000},
'1': {0: 500, 1: 400, 2: 100},
'2': {0: 1500, 1: 500, 2: 2000},
'3': {0: 0, 1: 1000, 2: 3000},
'4': {0: 0, 1: 500, 2: 20},
'5': {0: 0, 1: 50, 2: 0},
'6': {0: 0, 1: 0, 2: 0},
},columns=['Balance','1','2','3','4','5','6'])
ich versuche, die Balance im nächsten Jahr zu projizieren (balancieren so in Spalte 1 sollte 1 Saldo weniger Sammlung im Jahr beginnen). Gleichzeitig möchte ich das Guthaben auf Null notieren, wenn keine weiteren Sammlungen erwartet werden.
gbv = bp.copy()
startcol =1
endcol = 7
for i in range(startcol,endcol):
gbv.iloc[:,i] = gbv.iloc[:,i-1] - bp.iloc[:,i]
gbv[gbv < 0] = 0
gbv
Der obige Code funktioniert, aber das Gleichgewicht auf Null nicht aufschreiben, wenn nicht mehr Sammlungen zu erwarten sind, habe ich folgendes probiert, aber das gibt einen Fehler. Ich nehme an, das liegt daran, dass ich die Zeilen vergleiche (überprüfe, ob es zukünftige Sammlungen in bp gibt) und gbv.iloc [:, i] zwingt das Ergebnis auf die gesamten Spalten. Ich bin mir nicht sicher, wie ich das machen soll.
gbv = bp.copy()
startcol =2
endcol = 14
for i in range(startcol,endcol):
if bp.iloc[:,i:endcol].sum(axis=0) == 0:
gbv.iloc[:,i]= 0
else:
gbv.iloc[:,i] = gbv.iloc[:,i-1] - bp.iloc[:,i]
gbv[gbv < 0] = 0
gbv
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-22-1920f826f3ea> in <module>()
4 endcol = 14
5 for i in range(startcol,endcol):
----> 6 if bp.iloc[:,i:endcol].sum(axis=0) == 0:
7 gbv.iloc[:,i]= 0
8 else:
/Users/Jelmer/anaconda/lib/python3.5/site-packages/pandas/core/generic.py in __nonzero__(self)
951 raise ValueError("The truth value of a {0} is ambiguous. "
952 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 953 .format(self.__class__.__name__))
954
955 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Ich versuche, die folgende Ausgabe zu erhalten:
Balance 1 2 3 4 5 6
0 20000 19500 18000 0 0 0 0
1 2000 1600 1100 100 0 0 0
2 7000 6900 4900 1900 1880 0 0
Irgendwelche Vorschläge willkommen!
Und was genau ist das "gewünschte Ergebnis". – MSeifert
Um den Saldo auf Null zu schreiben, wenn keine weiteren Sammlungen erwartet werden, und den Saldo auf Null setzen (wenn Sammlungen> Saldo) – Jelmerd
Entschuldigung, ich hätte konkreter sein sollen: Bitte geben Sie an, wie 'gbv' am Ende aussehen soll . Genau wie du es mit dem Input gemacht hast. :) Es ist viel einfacher, Text zu verstehen, wenn Sie das Ergebnis haben, um zu verifizieren, dass es * richtig verstanden wurde *. – MSeifert