

Pythonとpandasの以下のプログラムに関する質問です。

以下の6つの変数は異なる期間とデータを持つ、index が datetimeindex の Series です。  
1~3の違いは期間が異なり、aとbはデータが異なります。

season_a1  
season_b1

season_a2  
season_b2

season_a3  
season_b3

[code]

    from pandas import DataFrame
    import numpy as np
    
    #結果を格納するDataFrame
    result_df1 = DataFrame(index=np.arange(0, 24))
    result_df2 = DataFrame(index=np.arange(0, 24))
    result_df3 = DataFrame(index=np.arange(0, 24))
    
    
    for year in range(2000, 2004):
    
        if str(year) in season_b1.index:
            a1 = season_a1[str(year)].index.hour.value_counts().sort_index()
            b1 = season_b1[str(year)].index.hour.value_counts().sort_index()
            result_df1['A' + str(year)] = a1
            result_df1['B' + str(year)] = b1
    # 1
    
        if str(year) in season_b2.index:
            a2 = season_a2[str(year)].index.hour.value_counts().sort_index()
            b2 = season_b2[str(year)].index.hour.value_counts().sort_index()
            result_df2['A' + str(year)] = a2
            result_df2['B' + str(year)] = b2
    # 2
    
        if str(year) in season_b3.index:
            a3 = season_a3[str(year)].index.hour.value_counts().sort_index()
            b3 = season_b3[str(year)].index.hour.value_counts().sort_index()
            result_df3['A' + str(year)] = a3
            result_df3['B' + str(year)] = b3
    # 3
    
    result_df1.to_csv(path1)
    result_df2.to_csv(path2)
    result_df3.to_csv(path3)
    
[/code]

単純にvalue_counts()で集計した結果の

a1, b1 は、 result_df1 に。  
a2, b2 は、 result_df2 に。  
a3, b3 は、 result_df3 に。

列として追加していき、 csvファイルとして出力するだけです。

欲しい結果としては、result_df1~3 の結果が全て異なるものになって欲しいのですが、  
それぞれ元となるデータも変数名も異なるのに、  
出力される結果が全て result_df3 の内容と同じになってしまいます。

確認として、# 1~3 の部分で result_df1~3 の内容を print() してみたのですが、  
1回目のループの # 2 のところで既に result_df1 が result_df2 と同じになっていて  
# 3 のところでは result_df1 , result_df2 も result_df3 と同じになっています。

初歩的なミスだとは思うのですが、解決できません。  
申し訳ございませんが、よろしくお願いいたします。


CC BY-SA 3.0
2017-11-24T19:46:56.933
39814
2019-03-07T03:02:10.347
2017-11-25T07:26:28.120
26318
26318
question
python python3 pandas numpy
Pythonでforループを使ってDataFrameを作成すると、異なる変数が全て同じ結果になる。


コメントにもあるように再現可能な最小限のコードがないと正確な回答をするのは難しいですが、例えば以下の部分で

[code]

    result_df1 = DataFrame(index=np.arange(0, 24))
    result_df2 = DataFrame(index=np.arange(0, 24))
    result_df3 = DataFrame(index=np.arange(0, 24))
    
[/code]

次のようになっていると、同じような現象が起こると思います。

[code]

    result_df1 = DataFrame(index=np.arange(0, 24))
    result_df2 = result_df1
    result_df3 = result_df1
    
[/code]

初期化時にこのようにしてしまうと、Pythonは参照を代入するのでresult_dfはすべて同一の値を持ちます。したがってすべて最後に代入したresult_df3の値になります。


CC BY-SA 3.0
2017-11-25T01:18:59.767
39816
2017-11-25T01:18:59.767
26246
39814
answer