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
@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ę udało
@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.
@biwalencik: Tak jak pisałem mam dwa df:
Pierwszy:
rel2.dtypes

Out[15]:
chrstgenpct float64
judgenpct float64
islmgenpct float64
budgenpct float64
hindgenpct float64
sikhgenpct float64
shntgenpct float64
bahgenpct float64
taogenpct float64
confgenpct float64
nonreligpct float64
othrgenpct float64
dtype: object

Index(['USA', 'CAN', 'BHS', 'CUB', 'HTI', 'DOM', 'JAM', 'TTO', 'BRB', 'DMA',
...
'VUT', 'SLB', 'KIR', 'TUV', 'FJI', 'TON', 'NRU', 'MHL', 'PLW', 'WSM'],
dtype='object', name='alpha-3', length=172)

Drugi:
fdi.dtypes

COU object // kody iso
PARTNERCOU object
@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.