The LOOP of the for statement is duplicated.

Asked 2 years ago, Updated 2 years ago, 288 views

We would like to combine the average with the evaluation of each class when we receive the following monthly test results (ABC evaluation).
Original Data

Combine Assessment

I want to combine only each element using loop, but the calculation results overlap.

df=pd.read_excel("~/Test.xlsx")
df1 = df ['Average']
df2 = df.iloc[1:, 2:]#1 to 5 pairs

df3 = [ ]
for i in df1:
    for index, jindf2.iterrows():
        df3.append(list(i+j))

Thank you for your cooperation.

python python3

2022-09-30 21:53

2 Answers

Apply allows you to concatenate columns by columns.

df4=df.iloc[:, 2:].apply(df['average'].str.cat)
df4 = pd.concat ([df['time'], df4], Axis=1)

This will give you the following data frames (4 pairs or later, no more 2020-04-01 or later):

Period 1 pair 2 pairs 3 pairs
0 2020-01-01 ABAC AA
1 2020-02-01 AA AC AC
2 2020-03-01 CC CBCA


2022-09-30 21:53

Here's how to use pandas.DataFrame.agg.

import pandas as pd
df = pd.DataFrame({
  'Time': ['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'],
  'Average': ['A', 'A', 'C', 'C', 'B', 'B', 'B', 'B', 'B', 'A', 'C', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
   'Group 1': ['B', 'A', 'C', 'A', 'B', 'A', 'C', 'C', 'C', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'A', 'A', 'A',
   '2 pairs': ['C', 'C', 'B', 'A', 'C', 'A', 'B', 'C', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'A', 'A', 'A', 'A', 'A'],
   'Group 3': ['A', 'C', 'A', 'C', 'C', 'B', 'A', 'C', 'A', 'B', 'B', 'A', 'A', 'B', 'C', 'A', 'A'],
   'Group 4': ['A', 'C', 'A', 'C', 'A', 'B', 'A', 'C', 'A', 'C', 'B', 'A', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
   'Group 5': ['B', 'B', 'B', 'A', 'C', 'A', 'B', 'C', 'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
})

dfx = df.agg(
  lambdax:x if x.name in ('Time', 'Average') else df ['Average'] + x)

pd.set_option('display.unicode.east_asian_width', True)
print(dfx)

=>
          Average period: 1 pair, 2 pairs, 3 pairs, 4 pairs, 5 pairs
0 2020/1/1 AAB AC AAB
1 2020/2/1 AAA AC AC AC AB
2 3/1/2020 CC CB CA CB
3 2020/4/1 CC CA CC CA CC CA
4 May 1, 2020 BB BC BC BC BC BC
5 June 1, 2020 BBBA BBBABABABABABABABABABABABABABABABABABA
6 July 1, 2020 BB BB BB BB BB
7 August 1, 2020 BC BC BC BABA
8 2020/9/1 AA AA AA AC
9 2020/10/1 CC CB CB CA CA
10 November 1, 2020 AB AB AB AB AB ABAC
11 December 1, 2020 BBBABABC


2022-09-30 21:53

If you have any answers or tips


© 2024 OneMinuteCode. All rights reserved.