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

标签 python pandas

假设我有以下内容:

df = pd.DataFrame({'a':range(2), 'b':range(2), 'c':range(2), 'd':range(2)})

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

df2 = df.pop(['c', 'd'])

这是我的错误:

TypeError: '['c', 'd']' is an invalid key

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

df2 = df[['c', 'd']]
df3 = df[['a', 'b']]

我知道上面的代码输入起来并不乏味,但这就是发明 DataFrame.pop 的原因——在从数据库中弹出一列时为我们节省一个步骤。

最佳答案

这必须是一个两步过程(您不能绕过这个,因为正如正确提到的那样,pop 对单个列起作用并返回一个系列)。

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

df2 = df[['c', 'd']].copy()
df = df.drop(['c', 'd'], axis=1)

这是使用 pd.concat 的单行版本:

df2 = pd.concat([df.pop(x) for x in ['c', 'd']], axis=1)

这仍然是一个两步过程,但您是在一行中完成的。

df

   a  b
0  0  0
1  1  1

df2

   c  d
0  0  0
1  1  1

话虽如此,我认为允许 pop 采取类似列表的列标题是有值(value)的,适本地返回弹出列的 DataFrame。这将为 GitHub 提出一个很好的功能请求,假设有人有时间写一篇。

关于python - 如何将 Pandas 数据框中的多列弹出到新的数据框中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49329569/

相关文章:

python - Pandas 系列对象对 Pandas 数据框对象的高效 bool 运算

python - 如果默认列中的行为 NaN,如何从数据框中的其他列中选择行?

python - Flask url_for - 不正确的静态文件夹路径

python - Scrapy 表示没有抓取任何页面/项目?

python - 执行值您将需要重写或转换表达式

python - 在 Pandas/Pyspark 中测量数据完整性并按日期分组

python - Pandas:读取文件的头部和中间部分

python - 有没有一种优雅的方法可以在Python中调用同一对象的方法列表?

python - pandas 实现不支持 out 参数

python - 属性错误 : 'CharField' object has no attribute 'model'