Pandas的数据帧复制每一行,将更改应用于副本并组合回datafram

2024-04-19 06:07:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要为数据帧中的每一行创建一个副本,对重复的行应用一些基本操作,然后将这些重复行与原始行合并回一个数据帧中。 我试图使用apply-for-it,打印结果显示它工作正常,但是当我从函数返回这两行并组装数据帧时,我得到一条错误消息“cannot copy sequence with size 7 to array axis with dimension 2”。这就好像它试图将这两个新行重新放入原来的1行插槽中。有没有关于如何在apply中实现它的见解(而不是通过循环中的每一行迭代)?在

def f(x):
  x_cpy=x.copy()
  x_cpy['A']=x['B']
  print(pd.concat([x,x_cpy],axis=1).T.reset_index(drop=True))    
  #return pd.concat([x,x_cpy],axis=1).T.reset_index(drop=True)

hld_pos.apply(f,axis=1)

Tags: 数据trueforindexwith副本drop基本操作
1条回答
网友
1楼 · 发布于 2024-04-19 06:07:17

熊猫的apply功能沿着一个轴运行。使用axis=1,它将沿着每一行操作。要执行类似于您正在尝试执行的操作,请考虑如何从现有行构造新行。这样的方法应该有效:

import pandas as pd

my_df = pd.DataFrame({'a': [1, 2, 3], 'b': [2, 4, 6]})

def f(row):
    """Return a new row with the items of the old row squared"""
    pd.Series({'a': row['a'] ** 2, 'b': row['b'] ** 2})

new_df = my_df.apply(f, axis=1)
combined = concat([my_df, new_df], axis=0)

相关问题 更多 >