【问题标题】:pyPandas: mess with join/append/concat two dataframespyPandas:加入/追加/连接两个数据帧的混乱
【发布时间】:2012-10-04 19:18:13
【问题描述】:

我有两个数据框:一个有 12 列,另一个有 9 列,它们都有 624 行。我想将它们并排加入,从而产生具有相同 624 行数的 21 cols 数据框。我想保留行顺序。观察到两个数据框都按“名称”列和“L1”列的降序排列。我已经尝试了几件事来通过axis = 1忽略索引加入它们。我所拥有的只是一个行数翻倍和一堆 NAN 的数据框。我也尝试连接和追加,但没有成功。 任何帮助表示赞赏。

n        Name  Position  ObsHET  PredHET  HWpval  %Geno  FamTrio  MendErr    MAF Alleles Rating
48  rs17818182  32945574   0.153    0.141  1.0000   98.9       29        0  0.076     G:T    NaN
45  rs17818176  32944041   0.033    0.033  1.0000  100.0       30        0  0.017     G:T    NaN
133  rs17818104  32879319   0.136    0.126  1.0000   98.9       29        0  0.068     T:C    NaN
105  rs17818087  32863970   0.241    0.307  0.2037   96.7       29        1  0.190     T:C    NaN
165  rs17818021  32794604   0.302    0.329  0.7637   85.6       20        0  0.208     A:C    NaN

           L1        L2      D   LOD     r2  CIlow  CIhi   Dist T-int
31331  rs17818182  rs640249  0.423  0.27  0.012   0.04  0.80  66596     -
31328  rs17818176  rs640249  1.000  0.21  0.014   0.05  0.97  65063     -
29083  rs17818104  rs640249  1.000  3.01  0.092   0.51  1.00    341     -
27571  rs17818087  rs640249  0.143  0.14  0.006   0.01  0.44  15008     -
14857  rs17818021  rs640249  0.311  0.68  0.033   0.06  0.57  84374     -

【问题讨论】:

    标签: python join dataframe pandas concat


    【解决方案1】:

    另一种方法是合并“名称”和“L1”:

    In [36]: df
    Out[36]: 
       a         b         c
    0  k -0.787279  1.431643
    1  m  1.278970  2.294351
    2  n  0.793787 -2.337330
    
    In [37]: df2
    Out[37]: 
       x         y         z
    2  k -2.419514  1.178166
    3  m -0.827535 -0.113485
    4  n  0.135814 -0.612922
    
    In [38]: df.merge(df2, left_on='a', right_on='x')
    Out[38]: 
       a         b         c  x         y         z
    0  k -0.787279  1.431643  k -2.419514  1.178166
    1  m  1.278970  2.294351  m -0.827535 -0.113485
    2  n  0.793787 -2.337330  n  0.135814 -0.612922
    

    另一种是在调用merge之前先调用DataFrame.reset_index:

    In [50]: df.reset_index().merge(df2.reset_index(), left_index=True, right_index=True)
    Out[50]: 
       index_x  a         b         c  index_y  x         y         z
    0        0  k -0.787279  1.431643        2  k -2.419514  1.178166
    1        1  m  1.278970  2.294351        3  m -0.827535 -0.113485
    2        2  n  0.793787 -2.337330        4  n  0.135814 -0.612922
    

    【讨论】:

    • 感谢您的帮助。我已经意识到重置会起作用,但是,为什么要将索引重置为 concat dfs 忽略它们?
    • 命名可能有点混乱,但ignore_index 忽略了连接轴,而不是df.index
    • 我不这么认为。至少在concat,你必须声明轴。
    • 忽略的内容由轴参数决定
    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 2018-09-27
    • 2017-09-23
    • 1970-01-01
    • 2016-07-31
    • 2021-11-13
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多