İki Seriyi pandalardaki bir DataFrame ile birleştirme


278

İki Serim var s1ve s2aynı (ardışık olmayan) indekslerim var. Nasıl DataFrame içinde iki sütun olmak s1ve s2olmak ve dizinlerden birini üçüncü sütun olarak tutmak nasıl?

Yanıtlar:


417

Bunu concatyapmanın güzel bir yolu olduğunu düşünüyorum . Varsa, Sütun olarak Dizinin ad özniteliklerini kullanır (aksi takdirde bunları numaralandırır):

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

Not: Bu, 2 Seriden fazlasını kapsar.


5
bu aslında kopyalamayı da önler (diksiyon çözümüne kıyasla)
Jeff

Bir örnekte bana 'ValueError: Birden fazla öğeye sahip bir dizinin gerçek değeri belirsiz. A.any () veya a.all () 'kullanın - herhangi bir fikir?
user7289

@ user7289 bunun nereden geleceğinden emin değilsiniz, bunu başka bir soru olarak sorabilir misiniz?
Andy Hayden

@AndyHayden: bir veya her iki dizinte yinelenenler varsa ne olur?
Mannaggia

2
@dafinguzman "sürekli bu işlevi tekrar kullanmak" ne demek olduğunu birçok kez veya benzer sonuçlandırma bir kez concat yapmayı tercih gerekir . pd.concat([list_of_dataframes])new_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
Andy Hayden

38

Her ikisi de aynı dizinlere sahipse neden sadece .to_frame kullanmıyorsunuz?

> = v0.23

a.to_frame().join(b)

< v0.23

a.to_frame().join(b.to_frame())

4
Belki bu daha uygun olurdu: a.to_frame (ad = 'a'). Katılmak (b.to_frame (ad = 'b'))
user3282777

33

Pandalar seri olarak geçirilenleri otomatik olarak hizalayacak ve ortak indeksi oluşturacaklar Burada aynı oluyorlar. reset_indexdizini bir sütuna taşır.

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

16

Örnek 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})

Pandalar, DataFramea dictile Seriesdeğerleri ve sütun adlarını anahtarlar olarak oluşturmanızı sağlar. SeriesDeğer olarak a bulduğunda , Seriesdizinin bir parçası olarak dizini kullanır DataFrame. Bu veri hizalaması Pandaların ana avantajlarından biridir. Sonuç olarak, başka ihtiyaçlarınız olmadıkça, yeni oluşturulan DataFramedeğer yinelenir. Yukarıdaki örnekte, data['idx_col']ile aynı verilere sahiptir data.index.


13

Eğer buna cevap verebilirsem.

Serileri veri çerçevesine dönüştürmenin arkasındaki temel hususlar

1. Kavramsal düzeyde, veri çerçevesindeki her sütun bir seridir.

2. Ve her sütun adı, bir seriyle eşleşen anahtar addır.

İki kavramı aklınızda tutarsanız, seriyi veri çerçevesine dönüştürmenin birçok yolunu düşünebilirsiniz. Kolay bir çözüm şöyle olacaktır:

Burada iki seri oluşturun

import pandas as pd

series_1 = pd.Series(list(range(10)))

series_2 = pd.Series(list(range(20,30)))

Yalnızca istenen sütun adlarıyla boş bir veri çerçevesi oluşturun

df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])

Eşleme konseptini kullanarak seri değerini veri çerçevesinin içine yerleştirin

df['Column_name#1'] = series_1

df['Column_name#2'] = series_2

Sonuçları şimdi kontrol edin

df.head(5)

6

Sorunuzu tam olarak anladığımdan emin değilim, ama yapmak istediğiniz şey bu mu?

pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)

( index=s1.indexburada bile gerekli değildir)


3

Aşağıdakilere dayanan çözümün basitleştirilmesi join():

df = a.to_frame().join(b)

1

Ben benim numpy dizi veya iseries bir veri çerçevesine dönüştürmek için pandalar kullandım ve ek olarak ek anahtar sütun 'tahmin' olarak ekledi. Bir listeye dönüştürülen veri çerçevesine ihtiyacınız varsa, değerler.tolist () kullanın

output=pd.DataFrame(X_test)
output['prediction']=y_pred

list=output.values.tolist()     
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.