熊猫相当于dplyr everything()

时间:2020-06-05 07:29:24

标签: pandas dplyr

在R中,我经常将dplyr的{​​{1}}与select结合使用

everything()

例如,上面的代码将重新排列数据帧的列,以使df %>% select(var4, var17, everything()) 为第一列,var4为第二列,随后列出所有其余列。最泛泛的方式是什么?处理许多列会使他们清楚地拼写出来,并跟踪它们的位置。

理想的解决方案是简短,易读且可用于熊猫链。

2 个答案:

答案 0 :(得分:5)

对列表中未指定的所有值使用Index.difference并结合在一起:

df = pd.DataFrame({
        'G':list('abcdef'),
         'var17':[4,5,4,5,5,4],
         'A':[7,8,9,4,2,3],
         'var4':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

cols = ['var4','var17']
another = df.columns.difference(cols, sort=False).tolist()
df = df[cols + another]
print (df)
   var4  var17  G  A  E  F
0     1      4  a  7  5  a
1     3      5  b  8  3  a
2     5      4  c  9  6  a
3     7      5  d  4  9  b
4     1      5  e  2  2  b
5     0      4  f  3  4  b

编辑:要进行链接,可以将DataFrame.pipe与传递的DataFrame一起使用:

def everything_after(df, cols):
    another = df.columns.difference(cols, sort=False).tolist()
    return df[cols + another]

df = df.pipe(everything_after, ['var4','var17']))
print (df)
   var4  var17  G  A  E  F
0     1      4  a  7  5  a
1     3      5  b  8  3  a
2     5      4  c  9  6  a
3     7      5  d  4  9  b
4     1      5  e  2  2  b
5     0      4  f  3  4  b

答案 1 :(得分:1)

现在你可以用 datar 多顺利!

>>> from datar import f
>>> from datar.datasets import iris
>>> from datar.dplyr import select, everything, slice_head
>>> iris >> slice_head(5)
   Sepal_Length  Sepal_Width  Petal_Length  Petal_Width Species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa
>>> iris >> select(f.Species, everything()) >> slice_head(5)
  Species  Sepal_Length  Sepal_Width  Petal_Length  Petal_Width
0  setosa           5.1          3.5           1.4          0.2
1  setosa           4.9          3.0           1.4          0.2
2  setosa           4.7          3.2           1.3          0.2
3  setosa           4.6          3.1           1.5          0.2
4  setosa           5.0          3.6           1.4          0.2

我是包的作者。如果您有任何问题,请随时提交问题。