Wpis z mikrobloga

#python #programowanie #pytanie #pandas

Mirki, pomocy bo męczę się już jakiś czas z tym i nie mogę znaleźć rozwiązania.
Wszystko wydaję się oczywiste i proste, ale nie działa :D
Mam dwa dataframy : jeden (fdi) z jakimiś tam danymi gdzie jest kolumna powiedzmy kraj1 i kraj2 (w kodzie ISO). Drugi (rel) gdzie indeksem jest właśnie kod ISO kraju a kolumny to udziały procentowe różnych religii.
Chcę dodać do pierwszego zmienną zgodności religii w postaci : suma po wszystkich religiach z (udział w kraju1 * w kraju2) (potem jeszcze pierwiastek z tego, ale to już nieważne).
No i najpierw chciałem tak:
fdi["comrel"]=0
for column in rel.columns:
fdi["com
rel"] = fdi["com_rel"] + (rel.iloc[fdi.kraj1].column * rel.iloc[fdi.kraj2].column)
No ale nie działa (coś typy niezgodne), potem kombinowałem coś z typami, dalej nie szło, zrobiłem jeszcze jedną pętle po wierszach fdi i pętla się nie kończyła.
Rozłożyłem to sobie żeby znaleźć błąd, policzyłem sobie już ta zmienna oddzielnie (b) i teraz chcę tylko ją przenieść do tego fdi w taki sposób:
for x in range (1403):
fdi.iloc[x].com_rel = b[x]
Proste przepisywanie, a ciągle pętla w nieskończoność.
fdi.shape to 1404,30
Pewnie rozwiązanie jest banalne, ale uczę się dopiero i jakoś na stacku nie mogłem znaleźć odpowiedzi.
Z góry dzięki.
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

for x in range (1403):


@kretson: taka pętla nie ma prawa się wykonywać w nieskończoność, więc pewnie czegoś nie napisałeś, najlepiej pokaż kod (najlepiej cały).
  • Odpowiedz
@piotrb: nie ma prawa, a jednak coś tam się liczy ciągle bo używa procesora i nie chce się skończyć.
Robię nową kopię df w nowym skrypcie i wystarczy, że zrobię coś takiego, zwykłe przypisanie wartości przez for (bez sensu praktycznego, ale żeby sprawdzić czy działa):
for x in range(1400):
fdi3.iloc[x].com_relig = 5
I jest to samo.
BTW już sobie ogólnie poradziłem z problemem, ale bardzo na około, najlepiej jakby się
  • Odpowiedz
@piotrb: Tam praktycznie nie ma kodu, ja używam tylko jupytera i pandasa do prostej obróbki danych. Mogę Ci wysłać ipynb i csv z tymi danymi (tam jest co chwilę in-out i ogólnie bałagan i tu ciężko wkleić) , ale to samo się dzieje jak robię zupełnie nowiutki skrypt:
Wczytuję csv jako dataframe i potem chcę zrobić to co wyżej.
  • Odpowiedz
@biwalencik: Nie, w tym fdi 6k a w rel2 jakieś 200. Pierwszy to pary krajów (i dla każdej kilka wierszy z różnych lat) , drugi ma tyle ile różnych krajów. Właśnie chodzi o to żeby tworząc nową kolumnę w tym co ma 6k i wpisując tam wyliczone wartości brał dane dla danego kraju z tego co ma 200.
  • Odpowiedz