Mam wyzwanie w skrypcie Python / Pandas. Moje dane to tabela ekspresji genów, zorganizowana w następujący sposób:

enter image description here

Zasadniczo Indeks 0 zawiera oba badane stany, podczas gdy Indeks 1 zawiera informacje o genie zidentyfikowanym między próbkami.

Następnie chciałbym utworzyć tabelę z indeksami 0 i 1 blisko siebie, w następujący sposób:

enter image description here

Próbowałem wielu rzeczy, takich jak wygenerowanie listy indeksu 0, aby dołączyć do indeksu 1 ...

Uratujcie mnie, chłopaki, proszę!

Dziękuję Ci

0
Guilherme Reis 20 grudzień 2019, 04:07
Czy możesz podać swoje dane jako wynik tekstowy, możemy utworzyć ramkę danych, możesz po prostu dać wycinek df[0:1].to_dict czy coś takiego.
 – 
oppressionslayer
20 grudzień 2019, 04:25
Otrzymuję 3 nagłówki: ,,,,Cond1,,,Cond2,, Gene name,Description,Foldchange,Anova,Sample 1,Sample 2,Sample 3,Sample 4,Sample 5,Sample 6 HK1,Hexokinaza,Infinity, 0,05,1213,1353,14356,0,0,0 Czy to pomaga?
 – 
Guilherme Reis
20 grudzień 2019, 04:40

2 odpowiedzi

Zakładając, że pierwszy wiersz nazw kolumn znajduje się w wierszu 0, a nazwy drugich kolumn w wierszu 1, spróbuj tego:

df.columns = [f'{c1}.{c2}'.strip('.') for c1,c2 in zip(df.loc[0], df.loc[1])]

df.loc[2:]

Powinien wyglądać tak

enter image description here

0
Community 20 czerwiec 2020, 12:12
Hej Myccha, dziękuję za pomoc! Ale to nie działa, nie wiem, czy to może pomóc, ale oto wersja pliku .csv: ,,,,Cond1,,,Cond2,, Gene name,Description,Foldchange,Anova,Sample 1, Próbka 2,Próbka 3,Próbka 4,Próbka 5,Próbka 6 HK1,Heksokinaza,Nieskończoność,0.05,1213,1353,14356,0,0,0 Chciałbym, żeby to było ,,,,Cond1,,,Cond2,, Gene nazwa,Opis,Foldchange,Anova,Sample 1.War1,Sample 2.Cond1,Sample 3.Cond1,Sample 4.Cond2,Sample 5.Cond2,Sample 6.Cond2 HK1,Hexokinaza,Infinity,0.05,1213,1353,14356 ,0,0,0 Kiedy zastosowałem twój skrypt, nic się nie zmieniło :/
 – 
Guilherme Reis
20 grudzień 2019, 04:46
Czy czytałeś to jako ramkę danych pandy? Jeśli tak, możesz zrobić df.to_clipboard() i wkleić wynik tutaj. PS możesz również użyć pd.read_clipboard()
 – 
Myccha
20 grudzień 2019, 04:54
Bez nazwy: 0 Bez nazwy: 1 Bez nazwy: 2 Bez nazwy: 3 Bez nazwy: 4 Bez nazwy: 5 Bez nazwy: 6 Bez nazwy: 7 Bez nazwy: 8 Bez nazwy: 9 Bez nazwy: 10 0 Cond1 Cond2 1 Nazwa genu Opis Foldchange Anova Sample 1 Sample 2 Sample 3 Sample 4 Próbka 5 Próbka 6 2 HK1 Heksokinaza Nieskończoność 0,05 1213 1353 14356 0 0 0
 – 
Guilherme Reis
20 grudzień 2019, 05:03
Zobacz zmiany w powyższej odpowiedzi. Możesz użyć pd.read_csv(file.csv, header=False).fillna(''), aby przenieść plik do pand. Może to pomaga.
 – 
Myccha
20 grudzień 2019, 05:44

Zgodnie z komentarzem OP zmieniam funkcję add_suffix.

Skonstruuj ramkę danych

s1 = "Gene name,Description,Foldchange,Anova,Sample 1,Sample 2,Sample 3,Sample 4,Sample 5,Sample 6".split(",")
s2 = "HK1,Hexokinase,Infinity,0.05,1213,1353,14356,0,0,0".split(",")

df = pd.DataFrame(s2).T
df.columns = s1

Zdefiniuj funkcję (zmień funkcję w zależności od różnych sytuacji)

def add_suffix(x):
    try:
        flag = int(x[-1])
    except:
        return x
    if flag <= 4:
        return x + '.Conditon1'
    else:
        return x + '.Condition2'

A następnie przypisz kolumny

cols = df.columns.to_series().apply(add_suffix)
df.columns = cols
0
Lambda 20 grudzień 2019, 05:53
Hej lambda, dziękuję za pomoc! Ale ten kod nie działa tak dobrze. W tym linku wpisuję mój plik csv, jeśli chcesz spróbować ponownie: pastebin.com/Td0CPP5v
 – 
Guilherme Reis
20 grudzień 2019, 05:37