Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pandas.MultiIndex:指定第一级中的所有元素_Python_Pandas_Dataframe_Multi Index - Fatal编程技术网

Python pandas.MultiIndex:指定第一级中的所有元素

Python pandas.MultiIndex:指定第一级中的所有元素,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我有一个带有多索引的数据帧,如下例所示: dates = pandas.date_range(datetime.date(2020,1,1), datetime.date(2020,1,4)) columns = ['a', 'b', 'c'] index = pandas.MultiIndex.from_product([dates,columns]) panel = pandas.DataFrame(index=index, columns=columns) 这给了我这样一个数据帧:

我有一个带有多索引的数据帧,如下例所示:

dates = pandas.date_range(datetime.date(2020,1,1), datetime.date(2020,1,4))
columns = ['a', 'b', 'c']
index = pandas.MultiIndex.from_product([dates,columns])
panel = pandas.DataFrame(index=index, columns=columns)
这给了我这样一个数据帧:

                a   b   c
2020-01-01  a   NaN NaN NaN
            b   NaN NaN NaN
            c   NaN NaN NaN
2020-01-02  a   NaN NaN NaN
            b   NaN NaN NaN
            c   NaN NaN NaN
2020-01-03  a   NaN NaN NaN
            b   NaN NaN NaN
            c   NaN NaN NaN
2020-01-04  a   NaN NaN NaN
            b   NaN NaN NaN
            c   NaN NaN NaN
我还有另一个二维数据帧,如下所示:

df = pandas.DataFrame(index=dates, columns=columns, data=numpy.random.rand(len(dates), len(columns)))
结果如下:

            a           b           c
2020-01-01  0.540867    0.426181    0.220182
2020-01-02  0.864340    0.432873    0.487878
2020-01-03  0.017099    0.181050    0.373139
2020-01-04  0.764557    0.097839    0.499788
for i in df.columns:
    for j in df.columns:
        panel.xs(i, level=1).loc[j] = df[i] * df[j]
我想分配给所有日期的
[a,a]
单元格,以及所有日期的
[a,b]
单元格等

类似于以下内容的东西:

            a           b           c
2020-01-01  0.540867    0.426181    0.220182
2020-01-02  0.864340    0.432873    0.487878
2020-01-03  0.017099    0.181050    0.373139
2020-01-04  0.764557    0.097839    0.499788
for i in df.columns:
    for j in df.columns:
        panel.xs(i, level=1).loc[j] = df[i] * df[j]
当然,这不起作用,因为我试图在切片的副本上设置一个值

使用copywarning设置
: 试图在
DataFrame

我尝试了几种变体:

panel.loc[:,'a']         # selects all rows, and column a
panel.loc[(:, 'a'), 'a'] # invalid syntax
etc...

如何选择索引级别1(例如:行“a”)、列“a”,跨越所有索引级别0-并能够设置

a = df.to_numpy()

panel = pd.DataFrame((a[...,None] * a[:,None,:]).reshape(-1, df.shape[1]), 
                     index=panel.index, columns=panel.columns)
输出:

                     a         b         c
2020-01-01 a  0.292537  0.230507  0.119089
           b  0.230507  0.181630  0.093837
           c  0.119089  0.093837  0.048480
2020-01-02 a  0.747084  0.374149  0.421692
           b  0.374149  0.187379  0.211189
           c  0.421692  0.211189  0.238025
2020-01-03 a  0.000292  0.003096  0.006380
           b  0.003096  0.032779  0.067557
           c  0.006380  0.067557  0.139233
2020-01-04 a  0.584547  0.074803  0.382116
           b  0.074803  0.009572  0.048899
           c  0.382116  0.048899  0.249788

谢谢你的建议-我肯定会深入研究,因为我还不完全了解它在做什么。没有办法像我最初尝试的那样在循环中赋值吗?也就是说,要分配给索引级别0中的所有项目,请在索引级别1中选择一个键?请解释
a[…,None]
a[:,None,:]
正在做什么?@user987654了解更多信息。