我有两个行数不相等的数据框。我想将一个数据框的前20行连接到另一个数据框的前5行,然后递归执行此操作,直到两个文件结束。
样本数据:
df1
col1 col2
1 0.1
2 0.2
3 0.3
4 0.4
5 0.5
6 0.6
20 0.10
21 0.01
22 0.01
23 0.01
24 0.01
40 0.01
100 0.90
df2
col1 col2
1 0.1
2 0.2
3 0.3
4 0.4
5 0.5
6 0.6
7 0.7
8 0.8
9 0.9
10 0.4
输出
col1 col2
1 0.1
2 0.2
3 0.3
4 0.4
5 0.5
6 0.6
20 0.10
1 0.1
2 0.2
3 0.3
4 0.4
5 0.5
20 0.10
21 0.01
22 0.01
23 0.01
24 0.01
40 0.01
6 0.6
7 0.7
8 0.8
9 0.9
10 0.4
谢谢
答案 0 :(得分:0)
想法是两个DataFrame
中的变化索引,它们分别用//
,concat
进行整数除法,按DataFrame.sort_index
排序,最后按reset_index
创建默认索引:
N1 = 20
N2 = 5
#if not default RangeIndex in both
df1 = df1.reset_index(drop=True)
df2 = df2.reset_index(drop=True)
df1.index //= N1
df2.index //= N2
df = pd.concat([df1, df2]).sort_index(kind='mergesort').reset_index(drop=True)
示例:
df1 = pd.DataFrame({'a':range(20)})
df2 = pd.DataFrame({'a':range(100, 110)})
#print (df1)
#print (df2)
N1 = 5
N2 = 3
df1.index //= N1
df2.index //= N2
df = pd.concat([df1, df2]).sort_index(kind='mergesort').reset_index(drop=True)
print (df)
a
0 0
1 1
2 2
3 3
4 4
5 100
6 101
7 102
8 5
9 6
10 7
11 8
12 9
13 103
14 104
15 105
16 10
17 11
18 12
19 13
20 14
21 106
22 107
23 108
24 15
25 16
26 17
27 18
28 19
29 109