【问题标题】:Pandas - Duplicate Rows at IterationPandas - 迭代中的重复行
【发布时间】: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

提前谢谢你!

【问题讨论】:

    标签: python list loops pandas duplicates


    【解决方案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 中?
    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2023-03-23
    • 2018-08-03
    相关资源
    最近更新 更多