Python 3.x 根据标签对数据帧条目进行选择性平均
我有一个数据帧Python 3.x 根据标签对数据帧条目进行选择性平均,python-3.x,pandas,Python 3.x,Pandas,我有一个数据帧 ID KD DT 0 4 2 5.6 1 4 5 8.7 4 4 8 1.9 5 4 9 1.7 6 4 1 8.8 3 4 3 7.2 9 4 4 3.1 我还有一系列标签,大小与uniqueKD的总数相同 L=[0,0,0,1,1,1,1]它简单地表示KD==1与标签0关联K
ID KD DT
0 4 2 5.6
1 4 5 8.7
4 4 8 1.9
5 4 9 1.7
6 4 1 8.8
3 4 3 7.2
9 4 4 3.1
我还有一系列标签,大小与uniqueKD的总数相同
L=[0,0,0,1,1,1,1]
它简单地表示KD==1
与标签0
关联KD==2
与标签0。。。KD==9,带有标签1
等(L
按KD
的排序顺序存储)
现在我有两个列表,l1=[1,2,5,9]
和l2=[3,4,8]
。我想设置与l2
中的KD
值相对应的DT
值,如果两者具有相同的标签,则它是l1
中DT
值的平均值
在本例中,KD==3
与l1
中的KD=1和2
相同的标签(标签=0)。所以我们设置了DT=(8.8+5.6)/2=7.2
我现在使用for循环来实现这一点,通过迭代l2
,找到具有相同标签的l1
条目,然后求平均值。有没有一种方法可以通过去掉for循环来非常有效地实现这一点
我的输出可以是以下形式的词典
d={3:7.2,4:5.2,8:5.2}
IIUC,首先设置KD列的索引,然后您可以选择'DT'并使用其中
将非isin(l1)
的值替换为Nan。然后,将列KD的映射转换为L
中的组号,并获得平均值。最后,loc
仅使用isin(l2)
的KD,并使用来记录
以获得预期输出
df_ = df.set_index('KD')
print ( df_['DT'].where(df_.index.isin(l1))\
.groupby(df_.index.map(pd.Series(L, df_.index.sort_values())))\
.transform('mean')\
.loc[df_.index.isin(l2)]\
.to_dict()
)
{8: 5.199999999999999, 3: 7.2, 4: 5.199999999999999}
键值不是对应的KD
值