如果列包含列表,则复制数据框行的功能

Function to replicate rows of dataframe if column contains list

我不确定标题的最佳方式。如果我有一个数据框和其中一列,我们称它为 'Tags',可能包含列表也可能不包含。如果 'Tags' 是一个列表,那么我想复制该行的次数与 'Tags' 列中的唯一项目一样多,然后用每行的唯一项目替换该列中的项目。

示例:

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'])

会导致:

我需要一个函数来将数据帧更改为:

应用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