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