Pandas - 迭代中的重复行

Posted

技术标签:

【中文标题】Pandas - 迭代中的重复行【英文标题】:Pandas - Duplicate Rows at Iteration 【发布时间】:2017-08-23 12:46:46 【问题描述】:

我正在尝试在数据框迭代期间创建重复的行。基本上,我有两个 for 循环,在第一个循环中,我将值输入 API,在第二个循环中,我从 JSON 输出中提取值。

我想复制当前行并根据列表中有多少项创建 N 行。 例如:

Name    Date      Sales     
John    1/1/17    100
Bob     1/2/17    200

items = []
for row in df.sales:
    url = 'www.samplewebsite.com/values=xyz/APIKEY=MYAPIKEY'
    result = simplejson.load(urllib.urlopen(url))
    for i in range(0, len(result['column a'][0]['column b']:
        items.append(result['column a'][0]['column b'][i]['item'])

在这个特定的循环中,创建了两个列表(一个给 John,另一个给 Bob):

items = ['Paper','Paper Clips','Pencils']
items = ['Notebook','Stapler','Highlighter','Pen']

期望的输出:

Name    Date      Sales     Item
John    1/1/17    100       Paper
John    1/1/17    100       Paper Clips
John    1/1/17    100       Pencils
Bob     1/2/17    200       Notebook
Bob     1/2/17    200       Stapler
Bob     1/2/17    200       Highlighter
Bob     1/2/17    200       Pen

提前谢谢你!

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点。从循环内部,您可以在提取每个项目后将一个项目和一个名称推送到主数据框中。或者,您可以将一堆项目与一个名称一起推送到一个 df 中,然后将其附加到每个名称之后的主 df 中。或者你可以收集所有的东西,然后在最后附加它们。

以下是如何将属于一个名称的所有项目放入 df 中,然后将其附加到主 df 中。您必须在循环内执行此操作,每个名称一次:

# set this up before the loop
mainDF = pd.DataFrame( columns=['Name','Items'])

## this gets populated inside the loop
name = 'John'
items = ['Paper','Paper Clips','Pencils']

# inside the loop create a df to hold one name and all the items belonging to that name
df = pd.DataFrame( columns=['Name','Items'])

#populate... do items first then fill in all the name with the one name
df.Items = items
df.Name = name

## then append the above df into the main df
mainDF = mainDF.append(df)

【讨论】:

感谢京东!我遇到的唯一问题是所有重复行的名称均为 Null。 hmmm.... 你是先添加的项目吗?那应该给你正确的行数。然后将内部df的名称列设置为您感兴趣的名称。这应该将名称分配给所有行,无论它是否是骗子。 Null 在哪里发挥作用?在内部或外部 DF 中?

以上是关于Pandas - 迭代中的重复行的主要内容,如果未能解决你的问题,请参考以下文章

如何管理 Pandas 中的重复行 [重复]

根据条件 pandas 删除 DataFrame 中的重复行

pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行并设置keep参数保留重复行中的最后一个数据行

Pandas:查找不在另一个DataFrame中的DataFrame行[重复]

使用 Pandas 删除 Python 中的多余行 [重复]

如果值在列表中,则 Pandas 数据框中的重复行