我有两个数据帧:一个表示样本块(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()
我觉得我就在那里,但就是不能让它工作。任何帮助都将不胜感激
如何创建一个新列,使用掩码来了解列的值 然后使用groupby?第一部分仍然有点荒谬,但是获得平均值的groupby更像python
您可以尝试以下方法,希望对您有所帮助
相关问题 更多 >
编程相关推荐