熊猫 - 迭代时重复行

时间:2017-03-29 20:28:36

标签: python list loops pandas duplicates

我试图在数据帧迭代期间创建重复的行。基本上,我有两个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 个答案:

答案 0 :(得分: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)