

以下のコードを実行した結果、最頻値をseries型で取得できたのですが、「大字仲原」や「大字鉄輪」など実際のデータだけを取得するためにはどうすればいいでしょうか？

▼コード

[code]

    null_stationAreas = df["地区名"].isnull()
    for null_stationArea in list(df.loc[null_stationAreas,"最寄駅：名称"].unique()):
        mode = df.loc[(~null_stationAreas) & (df["最寄駅：名称"]==null_stationArea),"地区名"].mode()
        print(mode)
    
[/code]

▼実行結果一部抜粋

[code]

    0    大字仲原
    dtype: object
    Series([], dtype: object)
    0    大字鉄輪
    dtype: object
    0    大字南立石
    1      石垣東
    dtype: object
    0    本町
    dtype: object
    0    徳倉
    1     萩
    dtype: object
    0    水戸島本町
    dtype: object
    
[/code]

▼試したこと  
Series型なのでほしいデータのインデックス番号である０を指定しました。最初のデータである「大字仲原」は取得できましたが他の「大字鉄輪」などは取得できずエラーが表示されデータを取得できませんでした。  
エラーについてはスクリーンショットをご参照ください。

[code]

    null_stationAreas = df["地区名"].isnull()
    for null_stationArea in list(df.loc[null_stationAreas,"最寄駅：名称"].unique()):
        mode = df.loc[(~null_stationAreas) & (df["最寄駅：名称"]==null_stationArea),"地区名"].mode()[0]
        print(mode)
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/WzR3s.png)](https://i.stack.imgur.com/WzR3s.png)

[![画像の説明をここに入力](https://i.stack.imgur.com/2E67P.png)](https://i.stack.imgur.com/2E67P.png)


CC BY-SA 4.0
2021-12-14T15:51:42.540
84135
2021-12-14T20:44:31.320
49502
question
python pandas
Pandasでmode()の結果のみをfor文で取得する方法


`values` を使います。

[code]

    import pandas as pd
    import io
    
    data_csv = '''
    地区名,最寄駅：名称
    ,A
    ,B
    ,C
    ,C
    大字仲原,A
    大字仲原,A
    大字仲原,B
    大字仲原,C
    大字鉄輪,A
    大字鉄輪,B
    大字鉄輪,B
    大字鉄輪,C
    大字鉄輪,C
    大字南立石,A
    大字南立石,B
    大字南立石,C
    大字南立石,C
    大字南立石,D
    大字南立石,D
    '''.strip()
    
    df = pd.read_csv(io.StringIO(data_csv))
    
    null_stationAreas = df["地区名"].isnull()
    for null_stationArea in list(df.loc[null_stationAreas,"最寄駅：名称"].unique()):
        mode = df.loc[
                   (~null_stationAreas) & (df["最寄駅：名称"]==null_stationArea), "地区名"
               ].mode().values
        print(mode)
    
    #
    ['大字仲原']
    ['大字鉄輪']
    ['大字南立石' '大字鉄輪']
    
[/code]

また、以下の様にも書くことができます(結果はデータフレーム)。

[code]

    stations = df.loc[df['地区名'].isnull(), "最寄駅：名称"].unique()
    dfx = (
      df.dropna()
        .loc[df["最寄駅：名称"].isin(stations)]
        .groupby("最寄駅：名称")
        .apply(lambda x: x["地区名"].mode().values)
        .to_frame("地区名(最頻値)"))
    
    print(dfx)
    #
                          地区名(最頻値)
    最寄駅：名称                        
    A                         [大字仲原]
    B                         [大字鉄輪]
    C             [大字南立石, 大字鉄輪]
    
[/code]


CC BY-SA 4.0
2021-12-14T20:29:05.667
84138
2021-12-14T20:44:31.320
2021-12-14T20:44:31.320
47127
47127
84135
answer