在python中连接两个不等维的数据框

时间:2019-11-28 11:41:22

标签: python pandas

我有两个行数不相等的数据框。我想将一个数据框的前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

谢谢

1 个答案:

答案 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