【发布时间】:2021-03-25 15:54:00
【问题描述】:
我有两个数据框:一个代表样本块 (df1),另一个代表时间序列中多个样本的性能值 (df2)。我想通过使用字典切片 df2 并计算中位数来填充 df1。虽然我可以通过 for 循环强制它,但我想学习更合适的方法。我觉得 df.apply() 应该可以做到,但是我遇到了“'Series'对象是可变的,因此它们不能被散列”错误。
df1=pd.DataFrame(columns=['qb','qb_median'])
df1.qb=['qb1','qb2']
df1
Out[76]:
qb qb_median
0 qb1 NaN
1 qb2 NaN
df2=pd.DataFrame({'sample':['A','B','C','D','E','F'],'x':[1,2,3,4,5,6]})
df2
Out[78]:
sample x
0 A 1
1 B 2
2 C 3
3 D 4
4 E 5
5 F 6
sets={'qb1':['A','B','C'],'qb2':['D','E','F']}
我想填充 df1 这样
qb qb_median
0 qb1 2
1 qb2 5
我认为可能有用的是:
def get_med(q, lookup_df):
return lookup_df.loc[lookup_df['sample'].isin(sets[q])]['x'].median()
df1['qb_median']=df1.apply(lambda x: get_med(df1.qb, df2), axis=1)
我也尝试过以下变体:
df1['qb_median']=df2.loc[df2['sample'].isin(sets[df1.qb_median])]['x'].median()
我觉得我“就在那儿”,但就是无法让它发挥作用。任何帮助将不胜感激。
【问题讨论】: