Pandas DataFrame

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
drindl
User
Beiträge: 5
Registriert: Sonntag 18. September 2016, 12:53

Pandas DataFrame

Beitragvon drindl » Sonntag 18. September 2016, 13:14

Ich arbeite für meine Masterarbeit das erste Mal mit pandas bzw. DataFram. Nun bin ich schon über einem Tag an dem selben Problem und finde einfach keine Lösung. Ich wäre wirklich froh, wenn mir jemand helfen könnte.

Hier ein Beispiel DataFram:
  1.     A   B   C
  2. 0   10  a   3
  3. 1   25  b   1
  4. 2   66  b   3
  5. 3   14  a   4
  6. 4   34  a   2
  7. 5   34  b   1
  8. 6   10  a   3
  9. 7   67  a   4
  10. 8   39  a   1
  11. 9   22  b   2
  12. 10  90  a   3
  13. 11  11  c   5


Nun möchte ich nur die Zeilen weiterverwenden, die auf die Zeile wo C == 4 folgen + eine zusätzliche Zeile.

Der Output müsste wie folgt aussehen:
  1.     A   B   C
  2. 4   34  a   2
  3. 5   34  b   1
  4. 8   39  a   1
  5. 9   22  b   2



Ich habe es bis jetzt hinbekommen nur die Zeilen zu erhalten, in welchen C == 4, jedoch keine zusätzlichen Zeile zu diesen Zeilen hinzu.

  1. in[1]:df[df.C== 4]
  2.  
  3. out[1]:
  4.     A   B   C
  5. 3   14  a   4
  6. 7   67  a   4


Ich wäre wirklich froh um Unterstützung, bin langsam aber sicher am verzweifeln! ^^
Zuletzt geändert von BlackJack am Sonntag 18. September 2016, 14:20, insgesamt 1-mal geändert.
Grund: Quelltext in Codebox-Tags gesetzt.
Benutzeravatar
BlackJack
Moderator
Beiträge: 32716
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Pandas DataFrame

Beitragvon BlackJack » Sonntag 18. September 2016, 16:37

@drindl: Wenn man das mal so betrachtet, dass es sich hier um Gruppen von Zeilen handelt, die mit einer 4 in Spalte C beginnen, dann könnte man eine Lösung mit der `groupby()`-Methode versuchen. Dazu kann man erst ein Array aus Spalte C erstellen bei dem die 4en mit `True` markiert sind. Das lässt sich mit der laufenden Summe zu einem Array machen in dem die Zeilen mit einer Nummer für jede Gruppe versehen sind. Dieses Array kann man für's Gruppieren verwenden, wobei es nicht als Quelle für einen neuen Index dienen soll. Von dem Gruppierungsobjekt kann man sich dann von jeder Gruppe die zweite und dritte Zeile geben lassen. Da können zwei Zeilen am Anfang zu viel sein, nämlich von der ersten Gruppe wenn die nicht mit einer 4 in Spalte C beginnt, die müsste man dann gegebenenfalls entfernen.
  1. In [118]: df
  2. Out[118]:
  3.      A  B  C
  4. 0   10  a  3
  5. 1   25  b  1
  6. 2   66  b  3
  7. 3   14  a  4
  8. 4   34  a  2
  9. 5   34  b  1
  10. 6   10  a  3
  11. 7   67  a  4
  12. 8   39  a  1
  13. 9   22  b  2
  14. 10  90  a  3
  15. 11  11  c  5
  16.  
  17. In [119]: df.C == 4
  18. Out[119]:
  19. 0     False
  20. 1     False
  21. 2     False
  22. 3      True
  23. 4     False
  24. 5     False
  25. 6     False
  26. 7      True
  27. 8     False
  28. 9     False
  29. 10    False
  30. 11    False
  31. Name: C, dtype: bool
  32.  
  33. In [120]: (df.C == 4).cumsum()
  34. Out[120]:
  35. 0     0
  36. 1     0
  37. 2     0
  38. 3     1
  39. 4     1
  40. 5     1
  41. 6     1
  42. 7     2
  43. 8     2
  44. 9     2
  45. 10    2
  46. 11    2
  47. Name: C, dtype: int32
  48.  
  49. In [121]: g = df.groupby((df.C == 4).cumsum(), as_index=False)
  50.  
  51. In [122]: g.nth([1, 2])
  52. Out[122]:
  53.     A  B  C
  54. 1  25  b  1
  55. 2  66  b  3
  56. 4  34  a  2
  57. 5  34  b  1
  58. 8  39  a  1
  59. 9  22  b  2
  60.  
  61. In [123]: g.nth([1, 2]).iloc[2:]
  62. Out[123]:
  63.     A  B  C
  64. 4  34  a  2
  65. 5  34  b  1
  66. 8  39  a  1
  67. 9  22  b  2
“XML combines all the inefficiency of text-based formats with most of the unreadability of binary formats :-)” — Oren Tirosh, c.l.p, 2002
drindl
User
Beiträge: 5
Registriert: Sonntag 18. September 2016, 12:53

Re: Pandas DataFrame

Beitragvon drindl » Sonntag 18. September 2016, 16:46

@BlackJack: Vielen Dank für deinen Lösungsvorschlag! Den versuche ich sofort in meinem Programm umzusetzen!

Liebe Grüsse
drindl

Zurück zu „Wissenschaftliches Rechnen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder