替换熊猫中的行

时间:2020-09-04 09:45:04

标签: python pandas numpy

我正在与python一起使用Pandas从两个框架开始创建一个新框架。 第一帧(称为frame1)由以下行组成:

A   B   C   D   E
1   1   1   1   1
2   2   2   2   2
3   3   3   3   3
4   4   4   4   4
5   5   5   5   5
6   6   6   6   6
7   7   7   7   7
8   8   8   8   8
9   9   9   9   9
10  10  10  10  10
11  11  11  11  11
12  12  12  12  12
13  13  13  13  13
14  14  14  14  14
15  15  15  15  15

第二帧(称为frame2)是:

A   B   C   D   E

19  19  19  19  19
24  24  24  24  24
29  29  29  29  29
34  34  34  34  34
39  39  39  39  39
44  44  44  44  44
49  49  49  49  49
54  54  54  54  54
59  59  59  59  59
64  64  64  64  64
69  69  69  69  69
74  74  74  74  74
79  79  79  79  79
84  84  84  84  84
89  89  89  89  89
94  94  94  94  94
99  99  99  99  99

现在我想用这种逻辑创建一个新的数据集:从frame1开始,每隔5行替换一次,直到frame1的末尾,然后将frame1的行替换为frame2的随机行(并从frame2中删除添加的行) 。可能的输出应该是:

A   B   C   D   E
1   1   1   1   1
2   2   2   2   2
3   3   3   3   3
4   4   4   4   4
59  59  59  59  59
6   6   6   6   6
7   7   7   7   7
8   8   8   8   8
9   9   9   9   9
29  29  29  29  29
11  11  11  11  11
12  12  12  12  12
13  13  13  13  13
14  14  14  14  14
84  84  84  84  84

我该怎么做?

2 个答案:

答案 0 :(得分:2)

这很简单:

frame1.loc[4::5] = frame2.sample(frac=1).reset_index(drop=True)

其中

  • df.loc[4::5]选择每个第五个元素,从df中的第五个元素开始,然后
  • df.sample(frac=1).reset_index(drop=True)随机洗牌df

答案 1 :(得分:1)

一种方法是首先获取要更新的索引(我们也可以切片分配,但会遇到end不包含的问题),然后取回{{1} },sample的大小如下:

df2