【问题标题】:Merging subgroups from groupby() to form new tables pandas python 2.7合并来自 groupby() 的子组以形成新表 pandas python 2.7
【发布时间】:2019-01-15 10:18:57
【问题描述】:
df = pd.DataFrame.from_csv('file.csv')
df=df.groupby('category')

print(len(df))
>>>OUT 50

我已经使用 groupby() 根据各自的类别对我的数据进行了分组,它产生了 50 个组,因为在我的数据框中找到了 50 个不同的类别。

现在的问题是我想从 50 个子组中形成 10 个新表,也就是说每个表将包含 5 个子组。

我将使用较小的数据作为示例:

ID    Category      Colour
01    Chocolate     Pink
02    Ice cream     Purple
03    Candy         Green
04    Popcorn       Yellow
05    Pizza         Blue
06    Pizza         Red
07    Chocolate     Purple
08    Cracker       Brown
09    Chocolate     Black
10    Spaghetti     Yellow
11    Soft drink    Purple
12    Candy         Purple
13    Juice         Red
14    Cookie        Pink
15    Cookie        Grey

上例中有 10 个类别,通过使用 groupby(),它将创建 10 个表(巧克力、冰淇淋、糖果、爆米花、比萨饼、饼干、意大利面、汽水、果汁、饼干)。如何通过将 2 个类别组合在一起产生 5 个决赛桌?

预期结果: 表一:

ID    Category      Colour
01    Chocolate     Pink
07    Chocolate     Purple
09    Chocolate     Black
02    Ice cream     Purple

表 2:

ID    Category      Colour
03    Candy         Green
12    Candy         Purple
04    Popcorn       Yellow

表 3:

ID    Category      Colour
05    Pizza         Blue
06    Pizza         Red
08    Cracker       Brown

等等。只是为了大致了解将组组合成表格的含义。

【问题讨论】:

  • 看看pandas.Series.isin函数link
  • @TBurgis 我认为这不是我想要的。因为我不会知道该类别的所有价值,也不想知道。我只想根据类别将两组数据添加在一起。
  • 那么如果有 10 个类别,您只想将它​​们分成 5 个随机组,每组 2 个?
  • @TBurgis 是的。我的主要观点是将这些组组合在一起以形成我想要的最终组数,在本例中为 5 个最终组
  • 好的。我要添加一个答案。希望这就是你所追求的。

标签: python python-2.7 pandas merge


【解决方案1】:

假设df 有一个名为category 的列,首先我们得到所有类别的列表,然后将其分成对:

all_categories = df['category'].unique()
category_pairs = all_categories.reshape(-1,2)

然后我们可以将df 拆分成对:

combined_dfs = [df[df['category'].isin(pair)] for pair in category_pairs]

combined_dfs 将是 5 个 DataFrames 的列表,每个 DataFrames 包含两个类别。要显示它们各自的内容:

for combined_df in combined_dfs:
    combined_df.head()

【讨论】:

  • @T Burgis 感谢您的回复。我在给定的数据集上进行了尝试,并设法得到了结果。但是,当我对 50 个类别的实际数据(超过 2000 个数据)进行尝试时,我无法得到结果。我唯一应该改变的是'reshape(x,y)'我错了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2015-12-28
  • 2018-10-17
  • 2022-01-24
相关资源
最近更新 更多