如何将Pandas数据框中的多列弹出到新数据框中?

Sea*_*thy 7 python pandas

假设我有以下内容:

df = pd.DataFrame({'a':range(2), 'b':range(2), 'c':range(2), 'd':range(2)})
Run Code Online (Sandbox Code Playgroud)

我想从数据框中“弹出”两列(“ c”和“ d”)到一个新的数据框中,在原始df中保留“ a”和“ b”。以下内容不起作用:

df2 = df.pop(['c', 'd'])
Run Code Online (Sandbox Code Playgroud)

这是我的错误:

TypeError: '['c', 'd']' is an invalid key
Run Code Online (Sandbox Code Playgroud)

除了执行以下操作之外,还有谁知道快速,一流的解决方案?

df2 = df[['c', 'd']]
df3 = df[['a', 'b']]
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码键入起来并不是那么繁琐,但这就是发明DataFrame.pop的原因-为我们节省了从数据库中弹出一列的步骤。

cs9*_*s95 11

这将是一个两步过程(您不能绕开它,因为正如正确提到的那样,它pop适用于单个列并返回一个Series)。

首先,切片df(步骤1),然后删除这些列(步骤2)。

df2 = df[['c', 'd']].copy()
del df[['c', 'd']] # df.drop(['c', 'd'], axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

这是使用的丑陋选择pd.concat

df2 = pd.concat([df.pop(x) for x in ['c', 'd']], 1)
Run Code Online (Sandbox Code Playgroud)

这仍然是一个两步过程,但是您需要一行完成。

df

   a  b
0  0  0
1  1  1

df2

   c  d
0  0  0
1  1  1
Run Code Online (Sandbox Code Playgroud)


pau*_*ult 7

这是一个替代方案,但我不确定它是否比您原来的解决方案更优雅:

df2 = pd.DataFrame([df.pop(x) for x in ['c', 'd']]).T
df3 = pd.DataFrame([df.pop(x) for x in ['a', 'b']]).T
Run Code Online (Sandbox Code Playgroud)

输出:

print(df2)
#   c  d
#0  0  0
#1  1  1

print(df3)
#   a  b
#0  0  0
#1  1  1
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用“pd.concat”来避免不必要的转置。但是+1 (3认同)