将循环中的数据帧连接成一个大数据帧

Concatenate dataframes from loop into one big dataframe

我有一个原始数据框,我想在其中覆盖一个循环中的几列。 最后,我想将所有数据帧(在循环中生成)堆叠到一个大数据帧中(然后包含原始数据帧的 x 倍,并在此处和那里进行更改。dfs 的堆叠似乎对我来说真的不起作用(并且A 列与 i 的乘法(与 i 相加确实有效))

在 'ID' 列中,我跟踪大数据帧中的所有不同数据帧,因为在查看 ID 时它们可以明显地在一起。

尝试过的代码:

import pandas as pd

df_or = pd.DataFrame({"Case": [1,2,3,4,5,6],  
                         "A": [3,5,2,8,4,1],       
                         "B": [10,12,24,8,57,84]})

print(df_or)

total = []

for i in range(0,2):
    df = df_or
    df.loc[:, 'A'] = df_or.loc[:, 'A'].mul(i)       #.add(i) works fine
    df.loc[:, 'ID'] = df.loc[:,'Case'] + i*100000
    print(df)

    total.append(df)

total = pd.concat(total)
total = total.sort_values('ID')
total.reset_index(inplace=True, drop=True)
print(total)

想要的结果:

   Case  A   B      ID
0     1  0  10       1
1     2  0  12       2
2     3  0  24       3
3     4  0   8       4 
4     5  0  57       5
5     6  0  84       6
6     1  3  10  100001
7     2  5  12  100002
8     3  2  24  100003
9     4  8   8  100004
10    5  4  57  100005
11    6  1  84  100006

相反,我得到:

    Case  A   B      ID
0      1  0  10  100001
1      1  0  10  100001
2      2  0  12  100002
3      2  0  12  100002
4      3  0  24  100003
5      3  0  24  100003
6      4  0   8  100004
7      4  0   8  100004
8      5  0  57  100005
9      5  0  57  100005
10     6  0  84  100006
11     6  0  84  100006

你可以试试这个:

df_or['id'] = [i for i in range(1, len(df_or['Case'])+1)]
df1 = df_or.copy()
df_or['id'] = ['10000'+str(i) for i in range(1, len(df_or['Case'])+1)]
df = pd.concat([df1, df_or])
print(df)

   Case  A   B      id
0     1  3  10       1
1     2  5  12       2
2     3  2  24       3
3     4  8   8       4
4     5  4  57       5
5     6  1  84       6
0     1  3  10  100001
1     2  5  12  100002
2     3  2  24  100003
3     4  8   8  100004
4     5  4  57  100005
5     6  1  84  100006

或者要修复您的代码,您需要使用 df = df_or.copy():

total = []

for i in range(0,2):
    df = df_or.copy()
    df.loc[:, 'A'] = df_or.loc[:, 'A'].mul(i)       #.add(i) works fine
    df.loc[:, 'ID'] = df.loc[:,'Case'] + i*100000
    print(df)

    total.append(df)

total = pd.concat(total)
total = total.sort_values('ID')
total.reset_index(inplace=True, drop=True)
print(total)

    Case  A   B      ID
0      1  0  10       1
1      2  0  12       2
2      3  0  24       3
3      4  0   8       4
4      5  0  57       5
5      6  0  84       6
6      1  3  10  100001
7      2  5  12  100002
8      3  2  24  100003
9      4  8   8  100004
10     5  4  57  100005
11     6  1  84  100006