多索引数据框之间的列之间的操作

时间:2019-11-04 16:43:15

标签: python dataframe

我想基于所有子列(Index2)在Index1的列之间执行一个操作,该列由'A'和'B'标识。我有多个日期,即多行。

我所拥有的:

const App = () => {
  const [isPopUpActive, setIsPopUpActive] = useState(false);

  const popUpOnOff = useCallback(() => {
    setIsPopUpActive(!isPopUpActive);
  }, [isPopUpActive, setIsPopUpActive]);

  return (
    <div>
      <SomeComponent trigger={popUpOnOff} />
      <PopUpComponent isActive={isPopUpActive} />
    </div>
  );
};

我想要什么:

d = {'Date':'20191101', 'Index1': ['A','A','A','B','B','B'], 'Index2': ['a','b','c','a','b','c'], 'Value':[0,2,0,3,5,4]}
df = pd.DataFrame(data=d)
df = df.pivot_table(index='Date', columns=['Index1','Index2'], values='Value', aggfunc=np.sum)

Index1    A         B      
Index2    a  b  c   a  b  c
Date                      
20191101  0  2  0   3  5  4

您对我如何执行此操作有想法吗?

非常感谢和问候!

编辑: 我现在想执行几个操作,例如A-B + C。输入是A-B + C,我可以执行1个或2个或更多操作,因此我需要一个递归算法。 你有什么主意吗 ?

2 个答案:

答案 0 :(得分:0)

这是我的版本。是你的愿望输出吗?

two

答案 1 :(得分:0)

我创建了一个递归函数。 数据包含原始系列A,B和C。 该函数将处理['A-B'],将其添加到数据中,并调用Combine_Indexes(['A-B','C'],['+'],data)。 当ops为空时,递归停止。

data = Combine_Indexes(['A','B','C'], ['-','+'], data)

功能:

def Combine_Indexes(indexes, ops, df):
    if len(ops)>0: #there are still operations to do
        op = ops[0]
        index1 = indexes[0]
        index2 = indexes[1]
        if op == '-':
            data_combined = pd.DataFrame([df[(index1,x)] - df[(index2,x)] for x in df.columns.levels[1]]).T
        elif op == '+':
            data_combined = pd.DataFrame([df[(index1,x)] + df[(index2,x)] for x in df.columns.levels[1]]).T   
        data_combined.columns = pd.MultiIndex.from_arrays([[index1 + op + index2]*len(df.columns.levels[1]),  df.columns.levels[1]])
        data_combined = df.merge(data_combined, left_index=True, right_index=True)
        indexes = [index1 + op + index2] + indexes[2:]
        return Combine_Indexes(indexes, ops[1:], data_combined) #we call back the function with the new indexes list, ops list and df
    else: #no more operation
        return df