2017-11-24 12 views
0

私は2つのシリーズを持っています。次のように見えます。シリーズのインデックスを別のシリーズから設定するには

2016-01-04 00:00:00+00:00 194.972 
2016-01-05 00:00:00+00:00 195.379 
2016-01-06 00:00:00+00:00 192.838 
2016-01-07 00:00:00+00:00 188.220 

日付はインデックスです。

別のシリーズは、以下のようになります。

0  186.679615 
1  186.409242 
2  185.783922 
3  185.598504 

私はそれは次のようになりますので、/設定された第1シリーズからインデックスを有する第2シリーズのインデックスを交換されて欲しい:

2016-01-04 00:00:00+00:00 186.679615 
2016-01-05 00:00:00+00:00 186.409242 
2016-01-06 00:00:00+00:00 185.783922 
2016-01-07 00:00:00+00:00 185.598504 

これができない場合は、2番目のシリーズの列を最初の列に追加して、次のように見えるようにすることはできますか?

2016-01-04 00:00:00+00:00 194.972 186.679615 
2016-01-05 00:00:00+00:00 195.379 186.409242 
2016-01-06 00:00:00+00:00 192.838 185.783922 
2016-01-07 00:00:00+00:00 188.220 185.598504 

答えて

0

パンダシリーズとデータフレームインデックスは、割り当てによって変更することができます。その後、

s2.index = s1.index 

したがって、もしあなたの2シリーズが呼び出されs1s2は、s2s1のインデックスを割り当てます。 2つのシリーズは同じ長さでなければならず、そうでなければValueErrorが上がることに注意してください。

あるいは

s1s2を使用してデータフレームを形成するには、s1.valuesインデックスなしs1のnumpyの配列を返すこと

df = pd.DataFrame({'s1': s1.values, 's2': s2.values}, index=s1.index) 

注を使用することができます。 このDataFrameを作成するには、ここで.valuesを使用することが重要です。そのため、Pandasは、s1s2の値をそれぞれの(および異なる!)インデックスに基づいて並べ替えることを試みません。 、違いを示す検討する


import pandas as pd 
s1 = pd.Series(range(4)) 
s2 = pd.Series(range(4), index=list('ABCD')) 
df = pd.DataFrame({'s1': s1.values, 's2': s2.values}, index=s1.index) 
# s1 s2 
# 0 0 0 
# 1 1 1 
# 2 2 2 
# 3 3 3 

df2 = pd.DataFrame({'s1': s1, 's2': s2}, index=s1.index) 
# s1 s2 
# 0 0 NaN 
# 1 1 NaN 
# 2 2 NaN 
# 3 3 NaN 

第2の例では、pd.DataFrameは、それぞれのインデックスに基づいてs1s2から値を整列させます。 index=s1.indexは、インデックスラベルがs1.indexの値のみが含まれるように行をトリミングします。 s2にはこれらのインデックスラベルの値がないため、値はNaNで埋められます。

+0

美しい、多くのありがとう! – thomas2013ch

関連する問題