给定索引列表 (python) 将多行插入到数据框中的最快方法
fastest way to insert multiple rows into a dataframe given a list of indexes (python)
我有一个数据框,我想在数据框内每个组开头的特定索引处插入行。例如,假设我有以下数据框:
import pandas as pd
df = pd.DataFrame(data=[['A',1,1],['A',2,3],['A',5,4],['B',3,4],['B',2,6],['B',8,4],['C',9,3],['C',3,7],['C',1,9],['D',5,5],['D',8,3],['D',4,7]], columns=['Group','val1','val2'])
我想复制列组中每个唯一值的第一行,并在增长数据框时将该行插入到每个组的开头。我目前可以通过使用 for 循环来实现这一点,但它非常慢,因为我的数据框很大,所以我正在寻找矢量化解决方案。
我有一个索引列表,我想在其中插入行。
idxs = [0, 3, 6, 9]
在循环的每次迭代中,我目前将每个 idx 处的数据帧切成两个数据帧,插入行,然后连接数据帧。我的数据框很大,所以这个过程很慢。
解决方案如下所示:
Group val1 val2
0 A 1 1
1 A 1 1
2 A 2 3
3 A 5 4
4 B 3 4
5 B 3 4
6 B 2 6
7 B 8 4
8 C 9 3
9 C 9 3
10 C 3 7
11 C 1 9
12 D 5 5
13 D 5 5
14 D 8 3
15 D 4 7
您可以通过按 group
分组、遍历每个组并通过将组的每个第一行连接到组本身来构建 DataFrame 来实现此目的,然后连接所有这些连接。
代码:
import pandas as pd
df = pd.DataFrame(data=[['A',1,1],['A',2,3],['A',5,4],['B',3,4],['B',2,6],['B',8,4],['C',9,3],['C',3,7],['C',1,9],['D',5,5],['D',8,3],['D',4,7]], columns=['Group','val1','val2'])
df_new = pd.concat([
pd.concat([grp.iloc[[0], :], grp])
for key, grp in df.groupby('Group')
])
print(df_new)
输出:
Group val1 val2
0 A 1 1
0 A 1 1
1 A 2 3
2 A 5 4
3 B 3 4
3 B 3 4
4 B 2 6
5 B 8 4
6 C 9 3
6 C 9 3
7 C 3 7
8 C 1 9
9 D 5 5
9 D 5 5
10 D 8 3
11 D 4 7
我有一个数据框,我想在数据框内每个组开头的特定索引处插入行。例如,假设我有以下数据框:
import pandas as pd
df = pd.DataFrame(data=[['A',1,1],['A',2,3],['A',5,4],['B',3,4],['B',2,6],['B',8,4],['C',9,3],['C',3,7],['C',1,9],['D',5,5],['D',8,3],['D',4,7]], columns=['Group','val1','val2'])
我想复制列组中每个唯一值的第一行,并在增长数据框时将该行插入到每个组的开头。我目前可以通过使用 for 循环来实现这一点,但它非常慢,因为我的数据框很大,所以我正在寻找矢量化解决方案。
我有一个索引列表,我想在其中插入行。
idxs = [0, 3, 6, 9]
在循环的每次迭代中,我目前将每个 idx 处的数据帧切成两个数据帧,插入行,然后连接数据帧。我的数据框很大,所以这个过程很慢。
解决方案如下所示:
Group val1 val2
0 A 1 1
1 A 1 1
2 A 2 3
3 A 5 4
4 B 3 4
5 B 3 4
6 B 2 6
7 B 8 4
8 C 9 3
9 C 9 3
10 C 3 7
11 C 1 9
12 D 5 5
13 D 5 5
14 D 8 3
15 D 4 7
您可以通过按 group
分组、遍历每个组并通过将组的每个第一行连接到组本身来构建 DataFrame 来实现此目的,然后连接所有这些连接。
代码:
import pandas as pd
df = pd.DataFrame(data=[['A',1,1],['A',2,3],['A',5,4],['B',3,4],['B',2,6],['B',8,4],['C',9,3],['C',3,7],['C',1,9],['D',5,5],['D',8,3],['D',4,7]], columns=['Group','val1','val2'])
df_new = pd.concat([
pd.concat([grp.iloc[[0], :], grp])
for key, grp in df.groupby('Group')
])
print(df_new)
输出:
Group val1 val2
0 A 1 1
0 A 1 1
1 A 2 3
2 A 5 4
3 B 3 4
3 B 3 4
4 B 2 6
5 B 8 4
6 C 9 3
6 C 9 3
7 C 3 7
8 C 1 9
9 D 5 5
9 D 5 5
10 D 8 3
11 D 4 7