如何使用panda为分组数据动态定义bin



有了一个数据集,我必须以多种方式对它进行分组(使用MultiIndex(,执行一些聚合并导出结果。其中一个操作是对具有价格的列进行装箱(装箱(,以获得每个桶中元素的数量。我需要3个桶,其中:

  • 在第一个桶中,我获得价格等于该分组的最低价格或等于或不高于最低价格的110%的所有元素
  • 在第二个桶中,我获得价格高于最低价格110%,但等于或不高于最低价格150%的所有元素
  • 在第三个桶-其余的

示例:

销售>xzxBxgzB<100>x
产品 国家col价格colb
第一个 DE A b 100
第二次 DE A g 105
第一个 FR A b 111
第二次 FR
第一个 DE B109
第二次 DE B120
第一个 FR B
第二次 FR
  • 只是按照您的描述
  • 至垃圾箱切口
  • 多索引和列groupby/aggunstack()
df = pd.DataFrame({'Product': ['First',
'Second',
'First',
'Second',
'First',
'Second',
'First',
'Second'],
'Country': ['DE', 'DE', 'FR', 'FR', 'DE', 'DE', 'FR', 'FR'],
'Sell': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'col': ['b', 'g', 'b', 'g', 'b', 'g', 'b', 'g'],
'price': [100, 105, 111, 100, 109, 120, 100, 200],
'colb': ['x', 'z', 'x', 'z', 'x', 'z', 'x', 'z'],
'bin': ['1x', '1x', '1.1x', '1x', '1x', '1.1x', '1x', '>1.5x']})
df["bin"] = pd.cut(
df["price"],
bins=[
df["price"].min() - 1,
df["price"].min() * 1.1,
df["price"].min() * 1.5,
df["price"].max(),
],
labels=["1x", "1.1x", ">1.5x"],
)
df.groupby(["Product","Country","Sell","bin"]).agg({"col":"count"}).unstack().droplevel(0,1)

输出

bin                   1x  1.1x  >1.5x
Product Country Sell                 
First   DE      A      1     0      0
B      1     0      0
FR      A      0     1      0
B      1     0      0
Second  DE      A      1     0      0
B      0     1      0
FR      A      1     0      0
B      0     0      1

最新更新