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

时间:2016-01-31 12:40:57

标签: python pandas dataframe swap

给定两个pandas dataframes和一个随机数x如何在点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

孩子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点交换信息

1 个答案:

答案 0 :(得分:1)

您可以使用copy并将值与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