【问题标题】:Process and return data from a group of a group处理和返回一组组中的数据
【发布时间】:2021-10-20 01:45:22
【问题描述】:

我有一个包含 3 个变量、2 个分类变量和 2 个数字变量的 pandas 数据框。

ID Trimester State Tax rate
45 T1 NY 20 0.25
23 T3 FL 34 0.3
35 T2 TX 45 0.6

我想得到一个表格的新表格:

ID Trimester State Tax rate Tax_per_state_per_trimester
45 T1 NY 20 0.25 H
23 T3 FL 34 0.3 L
35 T2 TX 45 0.6 M

其中新变量“Tax_per_state_per_trimester”是一个分类变量,表示相应子组的三分位数,其中 L = 第一个三分位数,M = 第二个三分位数,L = 最后一个三分位数

我知道我可以使用以下方法进行双重分组:

df.groupby(['State', 'Trimester'])

但我不知道从那里怎么走。

我猜想使用 quantile 函数应用或转换应该很有用,但是如何?

【问题讨论】:

  • 可以使用 pd.quantile(0.33) 吗?但是你三分位数的基础是什么?到您按三个月分组时,州,您将只有 1 个税值?那么计算三分位数的基数是什么?基础是所有三个月还是所有状态?我想不通。
  • 不会只赌 1 个税值,因为数据框要大得多,这只是一个样本。双重分组将(在任何操作之前)给出一个列表,其中包含每个州在每个学期的税收值。例如,组 NY_T1 将具有 [20,45,65,75] ,然后通常会应用一个函数,例如。意思是()。如果我想要,那么我只需执行 df.groupby(['State', 'Trimester'])['tax'].mean() ,我会得到每个州每三个月的平均税。
  • .mean() 你只需要 1 个数字吗?你想要的是说 [20,45,65,75,xx,xx,xx] 对于每个状态,tri,你想要一个分位数,对吧?不会只有 1 个数字吧?

标签: python pandas pandas-groupby feature-engineering


【解决方案1】:

你能看看这是否给你想要的结果吗?

df = pd.read_excel('Tax.xlsx')

def mx(tri,state):
    return df[(df['Trimester'].eq(tri)) & (df['State'].eq(state))] \
    .groupby(['Trimester','State'])['Tax'].apply(max)[0]

for i,v in df.iterrows():
    t = (v['Tax'] / mx(v['Trimester'],v['State']))
    df.loc[i,'Tax_per_state_per_trimester'] = 'L' if t < 1/3 else 'M' if t < 2/3 else 'H'

【讨论】:

  • @dov1000。我把它放上来看看这是否是你要找的结果。我想如果你的桌子很小,代码就可以了。但如果很大可能会很慢。
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2015-08-20
相关资源
最近更新 更多