2017-01-04 85 views
1

我有一张如下的表格(黑色)。我想创建一个额外的列,如红色,右侧可见。基本上对于“切片”列中的每个切片变量,我想从“低”列中检索相应的值。Python Pandas:以切片作为变量的表格操作

enter image description here

我试图这样做的无数的方法,我已经发布了一个问题在这里试图解决的办法之一,我虽然会工作:

Python Pandas: Function doesn't work when used with apply()

之一受访者那个问题表明我只是问如何实现它,因此我在这里。

我也转贴下面的代码来重建该数据帧:

df = pd.DataFrame(dict, columns=["low", "slices"]) 

    {'low': {0: 1207.25, 
    1: 1207.5, 
    2: 1205.75, 
    3: 1206.0, 
    4: 1201.0, 
    5: 1202.75, 
    6: 1203.75}, 
'slices': {0: [slice(1, 1, None)], 
    1: [slice(1, 2, None), slice(2, 2, None)], 
    2: [slice(1, 3, None), slice(2, 3, None), slice(3, 3, None)], 
    3: [slice(1, 4, None), 
    slice(2, 4, None), 
    slice(3, 4, None), 
    slice(4, 4, None)], 
    4: [slice(1, 5, None), 
    slice(2, 5, None), 
    slice(3, 5, None), 
    slice(4, 5, None), 
    slice(5, 5, None)], 
    5: [slice(1, 6, None), 
    slice(2, 6, None), 
    slice(3, 6, None), 
    slice(4, 6, None), 
    slice(5, 6, None), 
    slice(6, 6, None)], 
    6: [slice(1, 7, None), 
    slice(2, 7, None), 
    slice(3, 7, None), 
    slice(4, 7, None), 
    slice(5, 7, None), 
    slice(6, 7, None), 
    slice(7, 7, None)]}} 

回答

2

定义函数这样

def fun(slices): 
    return [df.low.loc[s].tolist() for s in slices] 

并申请在片列

df['slices_low'] = df.slices.apply(fun) 

df 

enter image description here

+1

^^我几乎整整一天都在寻找那个人......我们应该做一天或两天的大脑交换!无论如何非常感谢!有机会让人们在这里帮助真是太好了。 –

+0

@jimbasquiat另一个真正的积极结果是,你学会了如何更好地表达你的问题,并让你自己更多地利用SO。 – piRSquared

+1

快速问题你为什么在你的函数中使用.loc而不是.iloc?切片是基于索引号的整数值? –