gpt4 book ai didi

python - 来自两个不同数据帧的平均值

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:26 29 4
gpt4 key购买 nike

我有 df 像:

material plant  Order                
24990 89952 4568789,5098710
24990 89952 9448609,1007081
166621 3062 18364103
166621 3062 78309139
240758 3062 55146035
276009 3062 38501581,857542

和 df1 一样:

material plant   Order      m1     m2      m3   m4   m5
24990 89952 4568789 0.123 0.214 0.0 0.0 0.0
24990 89952 5098710 1.000 0.363 0.0 0.0 0.0
24990 89952 9448609 0.0 0.345 0.0 1.0 0.0
24990 89952 1007081 0.0 0.756 0.0 1.0 0.0
166621 3062 18364103 0.0 0.0 0.0 0.0 0.0
166621 3062 78309139 0.0 1.0 0.0 0.0 0.0
240758 3062 55146035 1.0 1.0 1.0 0.0 0.0
276009 3062 38501581 1.0 1.0 1.0 0.0 0.0
276009 3062 38575428 1.0 1.0 1.0 0.0 0.0

我想遍历 df1 中的订单,当 df2 中的订单匹配时,然后找到从 m1 到 m5 的平均值。我想像这样实现 df2:

material plant  Order              avg m1 avgm2 avgm3 avgm4 avgm5
24990 89952 4568789,5098710 0.5615 0.2885 0.0 0.0 0.0
24990 89952 9448609,1007081
166621 3062 18364103
166621 3062 78309139
240758 3062 55146035
276009 3062 38501581,857542

我正在尝试不同的方法来实现 df2,例如:

df2 = (df.groupby(df1, sort=False)['Order'].apply(lambda x: ','.split(x.astype(str)))
.mean()
.reset_index()
.reindex(columns=df.columns))
print (df2)

第二个:

group = df.columns[np.r_[0:3, 3:len(df.columns)]]
res = df1.groupby(group)['Order'].apply(list).mean().reset_index()

但我不确定这是不是正确的获取方式。

最佳答案

这是通过 numpy 和映射字典的一种方式。

# map Order to values with a dictionary
mapper = dict(zip(df1['Order'], df1[['m'+str(i) for i in range(1, 6)]].values))

# map comma-separated numbers to list of integers
df2_orders = [list(map(int, i)) for i in df2['Order'].str.split(',')]

# calculate mean
res = [np.mean([mapper.get(o, [0]*5) for o in order], axis=0).tolist() \
for order in df2_orders]

# join results to dataframe
df2 = df2.join(pd.DataFrame(res, columns=['avg_m'+str(i) for i in range(1, 6)]))

注意如果数据缺失(例如,订单857542),你可以指定包含哪些值,这里我使用0s。

结果

   material  plant            Order  avg_m1  avg_m2  avg_m3  avg_m4  avg_m5
0 24990 89952 4568789,5098710 0.5615 0.2885 0.0 0.0 0.0
1 24990 89952 9448609,1007081 0.0000 0.5505 0.0 1.0 0.0
2 166621 3062 18364103 0.0000 0.0000 0.0 0.0 0.0
3 166621 3062 78309139 0.0000 1.0000 0.0 0.0 0.0
4 240758 3062 55146035 1.0000 1.0000 1.0 0.0 0.0
5 276009 3062 38501581,857542 0.5000 0.5000 0.5 0.0 0.0

关于python - 来自两个不同数据帧的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49646670/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com