Unikátní dvojice hodnot ze různých sloupců – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Unikátní dvojice hodnot ze různých sloupců – Python – Fórum – Programujte.comUnikátní dvojice hodnot ze různých sloupců – Python – Fórum – Programujte.com

 

luckasm0
Duch
8. 3. 2020   #1
-
0
-

Dobrý den,

Pracuji na jednom projektu a docela jsem se teď zasekla. Mám Pandas Dataframe, ve kterém je několik sloupců, sloupce, se kterými potřebuji manipulovat jsou sloupce X,Y a time_to_final. Ráda bych udělala nový dataframe, kde budu mít unikátní dvojice X,Y, které nebudou diplikované jako jsou v původním Dataframe, ale pokaždé bych ráda, aby to jako hodnotu time_to_final, kterou mám v novém dataframe pojmenovanou min_time.

Pro interpretovatelnost jsem přidala dataframe, který je podobný tomu, se kterým pracuji.

Při spuštění kodu a postupném debugování vidím, že řádek elif je true pokaždé, i když X a Y v řádku i původního dataframe se neshodují s hodnotami v novém dataframe df. 

Můžete mi prosím poradit, co s tím? 


Grid_frame2 = {'flightID':['11111', '11111', '11111', '11111','2222','2222','2222','3333','3333','3333','3333'], 'timestamp':[1519669804, 1519669844, 1519669884, 1519669924,1519669976,1519679614,1519679615,1519679616,1519679800,1519679876,1519679999],'X':[1,1,1,1,2,3,4,4,4,5,6],'Y':[7,7,7,7,7,7,7,8,8,8,9],'time_to_final':[1,2,3,1,1,4,3,5,6,5,3]}
Grid_frame3 = pd.DataFrame(Grid_frame3)


column_names = ["X", "Y", "min_time"]
df = pd.DataFrame(columns = column_names)

for i in range(len(Grid_frame2)):
    if len(df) == 0:
        df.loc[i,"X"] = Grid_frame2.loc[i,"X"]
        df.loc[i,"Y"] = Grid_frame2.loc[i,"Y"]
        df.loc[i,"min_time"] = Grid_frame2.loc[i,"time_to_final"]
    else:
        if df['min_time'].loc[(df['X'] ==  Grid_frame2.X[i]) & (df['Y'] == Grid_frame2.Y[i])].any() >Grid_frame2.time_to_final[i]:
            df['min_time'].at[(df['X'] ==  Grid_frame2.X[i]) & (df['Y'] == Grid_frame2.Y[i])] = Grid_frame2.time_to_final[i]
        elif df['min_time'].loc[(df['X'] ==  Grid_frame2.X[i]) & (df['Y'] == Grid_frame2.Y[i])].any() <= Grid_frame2.time_to_final[i]:
            pass
        else:
            df = df.append({'X' : Grid_frame2.loc[i,"X"], 'Y' : Grid_frame2.loc[i,"Y"], 'min_time' : Grid_frame2.loc[i,"time_to_final"]},ignore_index=True)
Nahlásit jako SPAM
IP: 81.234.144.–
JerryM
~ Anonymní uživatel
649 příspěvků
8. 3. 2020   #2
-
0
-

#1 luckasm
o Pandas dataframe slyšim poprvé ... to sisi vybrala dobrovolně ? a nechceš radši klasickej MS SQL ???

Nahlásit jako SPAM
IP: 147.175.92.–
gna
~ Anonymní uživatel
1891 příspěvků
8. 3. 2020   #3
-
0
-

Any vrací True nebo False podle toho, jestli v datech je nebo není něco True. Nemyslím si, že takhle ten if může fungovat.

Jde to jednoduše udělat třeba pomocí groupby.

>>> Grid_frame2.groupby(['X', 'Y'], as_index=False)['time_to_final'].min()
   X  Y  time_to_final
0  1  7              1
1  2  7              1
2  3  7              4
3  4  7              3
4  4  8              5
5  5  8              5
6  6  9              3
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
8. 3. 2020   #4
-
0
-

   

.rename(columns={'time_to_final': 'min_time'})
Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 24 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý