python - 在一组 Pandas 数据框上应用一个值

标签 python pandas dataframe group-by

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

以下 A 组示例包含 1 个商店=1 和 3 个商店=2。

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

示例数据:

data = {'group':['A','A','A','A','B','B','B','B'],'store':['1','2','2','2','1','2','2','2'],'type':['3','3','1','1','5','0','5','5'],'num':['10','20','30','40','50','60','70','80']}
t1=pd.DataFrame(data)
group store type num    
A     1     3    10 
A     2     3    20 
A     2     1    30
A     2     1    40 
B     1     5    50 
B     2     0    60 
B     2     5    70 
B     2     5    80

正确的输出应该是一个新列('new_num'),其中包含类型匹配的每个组的 store=1 行的列表。

group store type num new_num
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  []

最佳答案

IIUC

t1['new_num']=[[] for x in range(len(t1))]
t1.loc[t1.store=='1','new_num']=[y.loc[y.type.isin(y.loc[y.store=='1','type']),'num'].tolist() for x , y in t1.groupby('group',sort=False)]
t1
Out[369]: 
  group store type num       new_num
0     A     1    3  10      [10, 20]
1     A     2    3  20            []
2     A     2    1  30            []
3     A     2    1  40            []
4     B     1    5  50  [50, 70, 80]
5     B     2    0  60            []
6     B     2    5  70            []
7     B     2    5  80            []

关于python - 在一组 Pandas 数据框上应用一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56798280/

相关文章:

python - R中是否有相当于powertransform的Python函数

python - Django 框架 : ModuleNotFoundError. 。 .'bootstrapform'

python-3.x - 从 Pandas 数据框中仅提取数字和字符串

python - 如何将 json 解析为 Pandas 数据框

python - 如何根据计算条件新建一列?

绑定(bind)一组数据集的行?

python - 循环直到出现完全可靠的异常

python - 将函数应用于 pandas 列

python - 通过 pandas 数据框和 numpy 进行迭代

python - Slack 机器人 : invite a non-bot user when @ mentioning them