Więc mój zbiór danych zawiera pewne informacje według lokalizacji dla n dat. Problem polega na tym, że każda data jest w rzeczywistości innym nagłówkiem kolumny. Na przykład CSV wygląda jak
location name Jan-2010 Feb-2010 March-2010
A "test" 12 20 30
B "foo" 18 20 25
Chciałbym, żeby to wyglądało
location name Date Value
A "test" Jan-2010 12
A "test" Feb-2010 20
A "test" March-2010 30
B "foo" Jan-2010 18
B "foo" Feb-2010 20
B "foo" March-2010 25
problem w tym, że nie wiem, ile dat jest w kolumnie (chociaż wiem, że zawsze będą zaczynać się po imieniu)
Odpowiedzi:
UPDATE
Od v0.20
melt
to funkcja pierwszego rzędu, której możesz teraz używaćSTARE (ER) WERSJE: <0,20
Możesz użyć,
pd.melt
aby uzyskać większość drogi, a następnie posortować:(Może chcesz dorzucić
.reset_index(drop=True)
, tylko po to, aby wydruk był czysty.)Uwaga :
pd.DataFrame.sort
został wycofany na korzyśćpd.DataFrame.sort_values
.źródło
df2
[z powrotem] nadf
pandas.pivot_table(df2,values='Value',index=['location','name'],columns='Date').reset_index()
.Użyj
set_index
zstack
forMultiIndex Series
, a następnieDataFrame
dodajreset_index
zrename
:źródło
Chyba znalazłem prostsze rozwiązanie
Połącz całość
temp1
ztemp2
kolumnąname
Masz teraz to, o co prosiłeś.
źródło
pd.wide_to_long
Możesz dodać prefiks do kolumn roku, a następnie przesyłać bezpośrednio do
pd.wide_to_long
. Nie będę udawać, że jest to wydajne , ale w pewnych sytuacjach może być wygodniejsze niżpd.melt
np. Gdy Twoje kolumny mają już odpowiedni prefiks.źródło