Mam dwie Serie s1
i s2
te same (nie następujące po sobie) wskaźniki. Jak połączyć s1
i s2
być dwiema kolumnami w ramce danych i zachować jeden z indeksów jako trzecią kolumnę?
Mam dwie Serie s1
i s2
te same (nie następujące po sobie) wskaźniki. Jak połączyć s1
i s2
być dwiema kolumnami w ramce danych i zachować jeden z indeksów jako trzecią kolumnę?
Odpowiedzi:
Myślę, że concat
to dobry sposób na zrobienie tego. Jeśli są obecne, używa atrybutów nazw Serii jako kolumn (w przeciwnym razie po prostu je numeruje):
In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1')
In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2')
In [3]: pd.concat([s1, s2], axis=1)
Out[3]:
s1 s2
A 1 3
B 2 4
In [4]: pd.concat([s1, s2], axis=1).reset_index()
Out[4]:
index s1 s2
0 A 1 3
1 B 2 4
Uwaga: dotyczy to więcej niż 2 serii.
pd.concat([list_of_dataframes])
kontra konkatowanie wiele razy new_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
lub podobnie.
Dlaczego nie użyjesz .to_frame, jeśli oba mają te same indeksy?
> = v0.23
a.to_frame().join(b)
< v0.23
a.to_frame().join(b.to_frame())
Pandy automatycznie dopasują te przekazywane szeregowo i utworzą wspólny indeks. Zdarza się, że tutaj są takie same. reset_index
przenosi indeks do kolumny.
In [2]: s1 = Series(randn(5),index=[1,2,4,5,6])
In [4]: s2 = Series(randn(5),index=[1,2,4,5,6])
In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index()
Out[8]:
index s1 s2
0 1 -0.176143 0.128635
1 2 -1.286470 0.908497
2 4 -0.995881 0.528050
3 5 0.402241 0.458870
4 6 0.380457 0.072251
Przykładowy kod:
a = pd.Series([1,2,3,4], index=[7,2,8,9])
b = pd.Series([5,6,7,8], index=[7,2,8,9])
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})
Pandy pozwalają tworzyć DataFrame
z dict
za Series
jako wartości i nazwy kolumn jako klucze. Gdy znajdzie Series
jako wartość, używa Series
indeksu jako części DataFrame
indeksu. To wyrównanie danych jest jednym z głównych atutów Pand. W konsekwencji, chyba że masz inne potrzeby, świeżo utworzona DataFrame
ma zduplikowaną wartość. W powyższym przykładzie data['idx_col']
ma te same dane, co data.index
.
Jeśli mogę na to odpowiedzieć.
Podstawą konwersji serii na ramkę danych jest zrozumienie tego
1. Na poziomie koncepcyjnym każda kolumna w ramce danych jest serią.
2. I każda nazwa kolumny to nazwa klucza, która jest odwzorowana na serię.
Jeśli pamiętasz o dwóch koncepcjach, możesz pomyśleć o wielu sposobach konwersji serii na ramkę danych. Jedno proste rozwiązanie będzie takie:
Utwórz tutaj dwie serie
import pandas as pd
series_1 = pd.Series(list(range(10)))
series_2 = pd.Series(list(range(20,30)))
Utwórz pustą ramkę danych z żądanymi nazwami kolumn
df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])
Umieść wartość szeregu w ramce danych za pomocą koncepcji mapowania
df['Column_name#1'] = series_1
df['Column_name#2'] = series_2
Sprawdź wyniki teraz
df.head(5)
Nie jestem pewien, czy w pełni rozumiem twoje pytanie, ale czy właśnie to chcesz zrobić?
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
( index=s1.index
nie jest tu nawet konieczne)
Uproszczenie rozwiązania oparte na join()
:
df = a.to_frame().join(b)
Użyłem pand, aby przekonwertować moją tablicę numpy lub iseries na ramkę danych, a następnie dodałem dodatkową kolumnę według klucza jako „przewidywanie”. Jeśli potrzebujesz przekonwertować ramkę danych z powrotem na listę, użyj wartości.tolist ()
output=pd.DataFrame(X_test)
output['prediction']=y_pred
list=output.values.tolist()