如何交换 2 pandas 数据帧中的行?

How to swap rows in 2 pandas dataframes?

给定两个 pandas dataframes 和一个随机数 x 我如何 'crossover' x 点的数据帧?

随机数:

x = 9

df1:

                Values
Parameters            
Kcd          99.789468
ka           55.137982
CID           0.000000
TGFbeta      17.842956
Ki            3.756849
Total_LR1R2  18.604000
Kr            0.089625
PR1           4.000462
PR2          12.485559
alpha         1.000000
Klid          1.404747

df2:

                Values
Parameters            
Kcd          43.576215
ka           24.103700
CID           0.000000
TGFbeta      96.228737
Ki            3.910448
Total_LR1R2  18.604000
Kr           57.097216
PR1           3.999886
PR2          14.623385
alpha         1.000000
Klid          0.420894

期望的输出

child1:

                Values
Parameters            
Kcd          43.576215
ka           24.103700
CID           0.000000
TGFbeta      96.228737
Ki            3.910448
Total_LR1R2  18.604000
Kr           57.097216
PR1           3.999886
PR2          12.485559
alpha         1.000000
Klid          1.404747

child 2

                Values
Parameters            
Kcd          99.789468
ka           55.137982
CID           0.000000
TGFbeta      17.842956
Ki            3.756849
Total_LR1R2  18.604000
Kr            0.089625
PR1           4.000462
PR2          14.623385
alpha         1.000000
Klid          0.420894

如您所见,该算法应转到 df1df2 的第 9 个元素,并在 x

点交换它们的信息

您可以使用 copy and swap values with iloc:

x = 9
df2['Values'].iloc[x-1:], df1['Values'].iloc[x-1:] = 
df1['Values'].iloc[x-1:].copy(), df2['Values'].iloc[x-1:].copy()
print df1
Parameters            
Kcd          99.789468
ka           55.137982
CID           0.000000
TGFbeta      17.842956
Ki            3.756849
Total_LR1R2  18.604000
Kr            0.089625
PR1           4.000462
PR2          14.623385
alpha         1.000000
Klid          0.420894
print df2
                Values
Parameters            
Kcd          43.576215
ka           24.103700
CID           0.000000
TGFbeta      96.228737
Ki            3.910448
Total_LR1R2  18.604000
Kr           57.097216
PR1           3.999886
PR2          12.485559
alpha         1.000000
Klid          1.404747

为了测试 DataFrames 已更改:

print df1
             Values
Parameters         
Kcd               1
ka                2
CID               3
TGFbeta           4
Ki                5
Total_LR1R2       6

print df2
             Values
Parameters         
Kcd               7
ka                8
CID               9
TGFbeta          10
Ki               11
Total_LR1R2      12
x = 4
df2['Values'].iloc[x-1:], df1['Values'].iloc[x-1:] = 
df1['Values'].iloc[x-1:].copy(), df2['Values'].iloc[x-1:].copy()
print df1
             Values
Parameters         
Kcd               1
ka                2
CID               3
TGFbeta          10
Ki               11

print df2
             Values
Parameters         
Kcd               7
ka                8
CID               9
TGFbeta           4
Ki                5
Total_LR1R2       6

如果不使用copy(),值只会在一个df:

中改变
df2['Values'].iloc[x-1:], df1['Values'].iloc[x-1:] = 
df1['Values'].iloc[x-1:], df2['Values'].iloc[x-1:]

print df1
             Values
Parameters         
Kcd               1
ka                2
CID               3
TGFbeta           4
Ki                5
Total_LR1R2       6
print df2
             Values
Parameters         
Kcd               7
ka                8
CID               9
TGFbeta           4
Ki                5
Total_LR1R2       6