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 删除 DataFrame 中的重复行
pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行并设置keep参数保留重复行中的最后一个数据行
Pandas:查找不在另一个DataFrame中的DataFrame行[重复]