修改多列数据框

时间:2019-01-27 06:48:37

标签: python pandas multi-index

我创建一个多列(嵌套列),如下所示:

  input          action result
      1  2  3  4 action      1 2 3 4
0    89  3  0  5

然后我要向其添加值,使其看起来像这样:

  input          action result
      1  2  3  4 action      1   2  3   4
0    89  3  0  5     64      1  54  0  34

这是我首先制作该数据框的方法(此方法可行):

def create_memory_from_input(input: dict) -> pd.DataFrame:
    ''' creates a dataframe from input dictionary'''
    arrays = [
        ['input' for k in sorted(input.keys())] + ['action'] + ['result' for k in sorted(input.keys())],
        [k for k in sorted(input.keys())] + ['action'] + [k for k in sorted(input.keys())]]
    tuples = list(zip(*arrays))
    index = pd.MultiIndex.from_tuples(tuples)
    values = [[v for _,v in sorted(input.items())] + [''] + ['' for _,v in sorted(input.items())]]
    return pd.DataFrame(list(values), columns=index)

这是我必须将操作和结果附加到数据框的代码,但是它不起作用。我是否正确引用了嵌套列?

input = {2:3, 1:89, 4:5, 3:0}
original = create_memory_from_input(input)
action = 64
result = {2:54, 1:1, 4:34, 3:0}
original['action']['action'][
    (original['input'][1] == 89) &
    (original['input'][2] == 3) &
    (original['input'][3] == 0) &
    (original['input'][4] == 5)] = action

任何反馈都值得赞赏。我考虑过要制作一个新的数据框,然后合并到输入列上,但这似乎不如简单地过滤数据框并将列设置为正确的值有效。

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

在这种情况下,应使用loc,否则将获得链式分配。有关更多说明,请参见此article

使用loc将数据追加到DataFrame的代码如下:

a_pop