将循环中的数据帧连接成一个大数据帧
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
我有一个原始数据框,我想在其中覆盖一个循环中的几列。 最后,我想将所有数据帧(在循环中生成)堆叠到一个大数据帧中(然后包含原始数据帧的 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