【发布时间】:2019-02-19 04:47:40
【问题描述】:
我有一个函数正在传递一个 pandas 数据帧,并且对于该数据帧中的每一行,我想创建 N 个其他行,除了 2 个列值之外,每一行都等效于原始行。
执行此操作的正确方法是什么 - 尤其是以 RAM 有效的方式?
到目前为止,我的尝试是运行pd.apply,然后为每一行调用一个函数,该函数返回一个pd.Series 对象列表,然后我将调用append 将它们添加到原始@ 987654325@。不过,这还没有成功。
这是我尝试使用一些虚拟代码进行复制的示例:
students = [ ('Jack', 34, 'Sydney' , 'Australia') ,
('Jill', 30, 'New York' , 'USA' ) ]
# Create a DataFrame object
df = pd.DataFrame(students, columns = ['Name' , 'Age', 'City' , 'Country'], index=['a', 'b', 'c' , 'd' , 'e' , 'f'])
# function I will use to explode a single row into 10 new rows
def replicate(x):
new_rows = []
i = 0
for j in range(3):
y = x.copy(deep=True)
y.Age = i
i += 1
new_rows.append(y)
return new_rows
# Iterate over each row and append the results
df.apply(lambda x: df.append(replicate(x))
对于上述情况,我希望输出如下所示:
Jack, 34, Sydney, Australia
Jack, 0, Sydney, Australia
Jack, 1, Sydney, Australia
Jack, 2, Sydney, Australia
Jill, 30, New York, USA
Jill, 0, New York, USA
Jill, 1, New York, USA
Jill, 2, New York, USA
最后,我希望我的数据框有 N 倍的行,我可以从原始行计算派生行。我想以一种空间有效的方式来做这件事,而这现在还没有发生。任何帮助表示赞赏!
【问题讨论】:
-
您能否指出您对此输入的预期结果是什么?
-
@DanielLabbe 是的!用预期的输出更新了问题
-
stackoverflow.com/questions/36875648/… 试试看。还有很多类似的问题。
-
@johnnyb 这个问题似乎是将值从一个 df 覆盖到另一个,我认为这与通过派生行扩展当前 df 的长度不同。虽然,也许我错过了你指出的重要内容:)