

以下のような、月別のテスト結果（ABC評価）があった際に、「平均」と各クラスの評価を結合させたいと考えております。  
[![元のデータ](https://i.stack.imgur.com/u0gRf.png)](https://i.stack.imgur.com/u0gRf.png)

[![評価を結合](https://i.stack.imgur.com/NPTwG.png)](https://i.stack.imgur.com/NPTwG.png)

loopを用いて各要素だけを結合したいのですが、計算結果が重複してしまいます。

[code]

    df = pd.read_excel("~/テスト.xlsx")
    df1 = df['平均']
    df2 = df.iloc[1:,2:]#1組から5組まで
    
    df3 = []
    for i in df1:
        for index , j in df2.iterrows():
            df3.append(list(i+j))
    
[/code]

よろしくお願いいたします。


CC BY-SA 4.0
2020-10-20T16:31:20.607
71360
2020-10-21T01:00:22.667
42209
question
python python3
for文のLOOPが重複してしまいます。


applyを使えば列ごとに連結処理を行えます。

[code]

    df4 = df.iloc[:,2:].apply(df['平均'].str.cat)
    df4 = pd.concat([df['時期'], df4], axis=1)
    
[/code]

これで次のようなデータフレームが得られます(4組以降、2020-04-01以降は省略)。

[code]

              時期  1組  2組  3組
    0 2020-01-01  AB  AC  AA
    1 2020-02-01  AA  AC  AC
    2 2020-03-01  CC  CB  CA
    
[/code]


CC BY-SA 4.0
2020-10-20T19:06:14.520
71361
2020-10-20T19:06:14.520
9464
71360
answer


以下は [pandas.DataFrame.agg](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.agg.html) を使用する方法です。

[code]

    import pandas as pd
    df = pd.DataFrame ({
      '時期': ['2020/1/1', '2020/2/1', '2020/3/1', '2020/4/1', '2020/5/1', '2020/6/1',
               '2020/7/1', '2020/8/1', '2020/9/1', '2020/10/1', '2020/11/1', '2020/12/1'],
      '平均': ['A', 'A', 'C', 'C', 'B', 'B', 'B', 'B', 'A', 'C', 'A', 'B'],
       '1組': ['B', 'A', 'C', 'A', 'B', 'A', 'A', 'C', 'C', 'C', 'B', 'B'],
       '2組': ['C', 'C', 'B', 'A', 'C', 'A', 'B', 'C', 'A', 'B', 'B', 'A'],
       '3組': ['A', 'C', 'A', 'C', 'C', 'B', 'A', 'C', 'A', 'B', 'C', 'A'],
       '4組': ['A', 'C', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'A', 'B', 'C'],
       '5組': ['B', 'B', 'B', 'A', 'C', 'A', 'B', 'A', 'C', 'A', 'C', 'C'],
    })
    
    dfx = df.agg(
      lambda x: x if x.name in ('時期', '平均') else df['平均'] + x)
    
    pd.set_option('display.unicode.east_asian_width', True)
    print(dfx)
    
    =>
              時期  平均 1組 2組  3組 4組 5組
    0    2020/1/1    A  AB  AC  AA  AA  AB
    1    2020/2/1    A  AA  AC  AC  AC  AB
    2    2020/3/1    C  CC  CB  CA  CA  CB
    3    2020/4/1    C  CA  CA  CC  CA  CA
    4    2020/5/1    B  BB  BC  BC  BC  BC
    5    2020/6/1    B  BA  BA  BB  BA  BA
    6    2020/7/1    B  BA  BB  BA  BB  BB
    7    2020/8/1    B  BC  BC  BC  BA  BA
    8    2020/9/1    A  AC  AA  AA  AC  AC
    9   2020/10/1    C  CC  CB  CB  CA  CA
    10  2020/11/1    A  AB  AB  AC  AB  AC
    11  2020/12/1    B  BB  BA  BA  BC  BC
    
[/code]


CC BY-SA 4.0
2020-10-21T01:00:22.667
71364
2020-10-21T01:00:22.667
71360
answer