94451


PandasのDataFrame.concatメソッドのsort引数にTrueを指定しても、（sort=Falseを指定しても）  
実行結果に変化が見られないのですが、  
どのような効果がるのでしょうか？

Pandasの公式ドキュメントは読んだのですが、理解できませんでした。  
<https://pandas.pydata.org/docs/reference/api/pandas.concat.html>

[code]

    import pandas as pd
    
    df1 = pd.DataFrame(
        data={
            'A': ['A2', 'A3'],
            'B': ['B2', 'B3']
        },
        index=[2, 3]
    )
    
    df2 = pd.DataFrame(
        data={
            'A': ['A0', 'A1'],
            'B': ['B0', 'B1']},
        index=[0, 1]
    )
    
    result = pd.concat([df1, df2], sort=False)  # ←sort引数はどのような効果があるのでしょうか？
    display(result)
    
    result = pd.concat([df1, df2], sort=True)  # ←sort引数はどのような効果があるのでしょうか？
    display(result)
    
    result = result.sort_index()
    display(result)  # ←sort=Trueとしたときの期待していた結果です。
    
[/code]

以下、実行結果です。  
[![画像の説明をここに入力](https://i.stack.imgur.com/XVmMh.png)](https://i.stack.imgur.com/XVmMh.png)


CC BY-SA 4.0
2023-04-08T14:35:31.797
94450
2023-04-08T17:11:46.230
2023-04-08T17:11:46.230
3060
35267
question
python python3 pandas
PandasのDataFrame.concatメソッドのsort引数の意味、効果は？


行のソートではなく列の表示順をソートするかしないかを指定できるようです。

[code]

    import pandas as pd
    
    df1 = pd.DataFrame(
        data={
            'B': ['B2', 'B3'],
            'A': ['A2', 'A3'],
        },
        index=[2, 3]
    )
    
    df2 = pd.DataFrame(
        data={
            'A': ['A0', 'A1'],
            'B': ['B0', 'B1']},
        index=[0, 1]
    )
    
    result = pd.concat([df1, df2], sort=False)
    print(result)
    #    B   A
    #2  B2  A2
    #3  B3  A3
    #0  B0  A0
    #1  B1  A1
    
    result = pd.concat([df1, df2], sort=True)
    print(result)
    #    A   B
    #2  A2  B2
    #3  A3  B3
    #0  A0  B0
    #1  A1  B1
    
[/code]


CC BY-SA 4.0
2023-04-08T15:08:03.930
94451
2023-04-08T15:08:03.930
39819
94450
answer


参考情報として。

[pandas.concat — pandas 2.0.0
documentation](https://pandas.pydata.org/docs/reference/api/pandas.concat.html)

>
[code]

>     sort: bool, default False
>  
>         Sort non-concatenation axis if it is not already aligned.
>  
[/code]

**non-concatenation axis**
と記載されているので、`axis=1`(列方向に結合)を指定するとインデックス(行)がソートされます。(無論、期待する結果にはなりませんが)

[code]

    result = pd.concat([df1, df2], axis=1, sort=True)
    
    #      A    B    A    B
    # 0  NaN  NaN   A0   B0
    # 1  NaN  NaN   A1   B1
    # 2   A2   B2  NaN  NaN
    # 3   A3   B3  NaN  NaN
    
[/code]


CC BY-SA 4.0
2023-04-08T17:05:40.127
94452
2023-04-08T17:05:40.127
47127
94450
answer