Python 跨一组数据帧应用一个值

Python 跨一组数据帧应用一个值,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,我试图在类型匹配的每个组中汇总值,并将其应用于store=1的行 下面的A组示例包含一个store=1和三个store=2 我想将Level=A中的所有类型3汇总到store=1行 样本数据: data={'group':['A','A','A','A','B','B','B','B','B'],'store':['1','2','2','2','1','2','2','2','2'],'type':['3','3','1','5','0','5','5','num:['10','20','30

我试图在类型匹配的每个组中汇总值,并将其应用于store=1的行

下面的A组示例包含一个store=1和三个store=2

我想将Level=A中的所有类型3汇总到store=1行

样本数据:

data={'group':['A','A','A','A','B','B','B','B','B'],'store':['1','2','2','2','1','2','2','2','2'],'type':['3','3','1','5','0','5','5','num:['10','20','30','40','50','60','80']
t1=pd.数据帧(数据)
组存储类型num
A 13 10
A 2 3 20
A 21 30
A 21140
B 1550
B2060
B 2 5 70
B 2 5 80
正确的输出应该是一个新列('new_num'),其中包含类型匹配的每个组的store=1行的列表

组存储类型num new\u num
A 13 10['10','20']
A 2 3 20[]
A 21 30[]
A 21 40[]
B15500[50','70','80']
B 2 0 60[]
B 2 5 70[]
B 2 5 80[]
IIUC

设置


1) 使用一些不可靠的字符串concat和
groupby

u = t1.group + t1.type
check = u[t1.store.eq('1')]
m = t1.loc[u.isin(check)].groupby('group')['num'].agg(list)

res.loc[res.store.eq('1'), 'new_num'] = m

2) 如果你想离灯光更远,可以使用一个讨厌的
pivot

f = t1.pivot_table(
  index=['group', 'type'],
  columns='store',
  values='num',
  aggfunc=list
).reset_index()

m = f[f['1'].notnull()].set_index('group').drop('type', 1).sum(1)

res.loc[res.store.eq('1'), 'new_num'] = m

两者都设法产生:

      store type num       new_num
group
A         1    3  10      [10, 20]
A         2    3  20            []
A         2    1  30            []
A         2    1  40            []
B         1    5  50  [50, 70, 80]
B         2    0  60            []
B         2    5  70            []
B         2    5  80            []

虽然使用了
pivot
,但实际上我认为该解决方案非常简洁:

store group type     1         2
0         A    1   NaN  [30, 40]
1         A    3  [10]      [20]
2         B    0   NaN      [60]
3         B    5  [50]  [70, 80]

它生成上述聚合,您可以找到非空值,这些值是您所追求的所有匹配组类型组合,跨这些行求和将为您提供所需的聚合列表。

这似乎是一个不明确的问题,您需要为每个组使用类型的最大出现次数来创建新值?很抱歉,这是一个非常棘手的问题。我想创建一个新的_num列,它是“store=1”的每一行中每个“group”的所有“num”的列表,其中“type”在每个group中匹配。因此我们需要为每个group匹配store 1中的任何类型?是的。对于第一行A组,我有store 1和type 3。我想为组A返回所有其他'num'值,其中store=2,type与store 1的类型匹配。我甚至没有耐心分析问题的内容。
      store type num       new_num
group
A         1    3  10      [10, 20]
A         2    3  20            []
A         2    1  30            []
A         2    1  40            []
B         1    5  50  [50, 70, 80]
B         2    0  60            []
B         2    5  70            []
B         2    5  80            []
store group type     1         2
0         A    1   NaN  [30, 40]
1         A    3  [10]      [20]
2         B    0   NaN      [60]
3         B    5  [50]  [70, 80]