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了解更多信息。