如果列包含列表,则复制数据帧的行的函数

问题描述

我不确定标题的最佳方法。如果我有一个数据框和其中一列,可以称之为“标签”,它可以包含列表,也可以不包含列表。如果“标签”是一个列表,那么我想复制该行的次数与“标签”列中唯一项的重复次数相同,然后将该列中的项目替换为每一行的唯一项。

示例:

import pandas as pd 

# create dummy dataframe
df = {'Date': ['2020-10-28'],'Item': 'My_fake_item','Tags': [['A','B']],'Count': 3}

df = pd.DataFrame(df,columns=['Date','Item','Tags','Count'])

将导致:

Original Dataframe

我需要一个将数据框更改为此的函数

New Dataframe

解决方法

例如,应用explode方法

df_exploded = (
        df.set_index(["Date","Item","Count"])
        .apply(pd.Series.explode)
        .reset_index()
    )

将导致

df_exploded
>>>
    Date        Item         Count  Tags
0   2020-10-28  My_fake_item    3   A
1   2020-10-28  My_fake_item    3   B

,并且无需检查元素是否为列表或列上的

import pandas as pd 

# create dummy dataframe
df = {'Date': ['2020-10-28','2020-11-01'],'Item': ['My_fake_item','My_other_item'],'Tags': [['A','B'],'C'],'Count': [3,5]}

df = pd.DataFrame(df,columns=['Date','Item','Tags','Count'])

将导致

          Date  Item          Count Tags
0   2020-10-28  My_fake_item    3   A
1   2020-10-28  My_fake_item    3   B
2   2020-11-01  My_other_item   5   C