Python 使用值列表(或系列)更新多索引数据帧

Python 使用值列表(或系列)更新多索引数据帧,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我希望能够使用在另一个现有数据帧上执行计算的单独函数的输出来更新多索引数据帧中的值 比如说,我有以下几点: import numpy as np, pandas as pd names = ['Johnson','Jackson','Smith'] attributes = ['x1','x2','x3','x4','x5'] categories = ['y1','y2','y3','y4','y5','y6'] index = pd.MultiIndex.from_product([na

我希望能够使用在另一个现有数据帧上执行计算的单独函数的输出来更新多索引数据帧中的值

比如说,我有以下几点:

import numpy as np, pandas as pd

names = ['Johnson','Jackson','Smith']
attributes = ['x1','x2','x3','x4','x5']
categories = ['y1','y2','y3','y4','y5','y6']

index = pd.MultiIndex.from_product([names, attributes])
placeholders = np.zeros((len(names)*len(attributes), len(categories)), dtype=int)

df = pd.DataFrame(placeholders, index=index, columns=categories)
这将生成相应的数据帧:

            y1  y2  y3  y4  y5  y6
Johnson x1   0   0   0   0   0   0
        x2   0   0   0   0   0   0
        x3   0   0   0   0   0   0
        x4   0   0   0   0   0   0
        x5   0   0   0   0   0   0
Jackson x1   0   0   0   0   0   0
        x2   0   0   0   0   0   0
        x3   0   0   0   0   0   0
        x4   0   0   0   0   0   0
        x5   0   0   0   0   0   0
Smith   x1   0   0   0   0   0   0
        x2   0   0   0   0   0   0
        x3   0   0   0   0   0   0
        x4   0   0   0   0   0   0
        x5   0   0   0   0   0   0
现在,我有另一个函数,它生成一系列值,然后我想用这些值来更新这个数据帧。例如:

x1 = pd.Series([2274, 556, 1718, 1171, 183, 194], index=categories)
x2 = pd.Series([627, 154, 473, 215, 68, 77], index=categories)
如何更新
('Johnson','x1')
的系列值

向量
x1
x2
是通过调用两个嵌套for循环中的函数生成的。我似乎不知道如何更新数据帧,值只是保持为全零:

for i in names:
    for j in attributes:
        x1 = generate_data_list('x1')
        df.loc[i,j].update(x1)

谢谢你的帮助

只需将
x1
分配给
df.loc[i,j]

df.loc['Johnson', 'x1'] = x1
或:


只需将
x1
分配给
df.loc[i,j]

df.loc['Johnson', 'x1'] = x1
或:


您可以用正确的格式创建信息,然后使用
update

x1 = pd.DataFrame(data=[[2274, 556, 1718, 1171, 183, 194]], index=pd.MultiIndex.from_arrays([['Johnson'],['x1']]),columns=categories)
x1
              y1   y2    y3    y4   y5   y6
Johnson x1  2274  556  1718  1171  183  194
df.update(x1)
df
                y1     y2      y3      y4     y5     y6
Johnson x1  2274.0  556.0  1718.0  1171.0  183.0  194.0
        x2     0.0    0.0     0.0     0.0    0.0    0.0
        x3     0.0    0.0     0.0     0.0    0.0    0.0
        x4     0.0    0.0     0.0     0.0    0.0    0.0
        x5     0.0    0.0     0.0     0.0    0.0    0.0
Jackson x1     0.0    0.0     0.0     0.0    0.0    0.0
        x2     0.0    0.0     0.0     0.0    0.0    0.0
        x3     0.0    0.0     0.0     0.0    0.0    0.0
        x4     0.0    0.0     0.0     0.0    0.0    0.0
        x5     0.0    0.0     0.0     0.0    0.0    0.0
Smith   x1     0.0    0.0     0.0     0.0    0.0    0.0
        x2     0.0    0.0     0.0     0.0    0.0    0.0
        x3     0.0    0.0     0.0     0.0    0.0    0.0
        x4     0.0    0.0     0.0     0.0    0.0    0.0
        x5     0.0    0.0     0.0     0.0    0.0    0.0

您可以用正确的格式创建信息,然后使用
update

x1 = pd.DataFrame(data=[[2274, 556, 1718, 1171, 183, 194]], index=pd.MultiIndex.from_arrays([['Johnson'],['x1']]),columns=categories)
x1
              y1   y2    y3    y4   y5   y6
Johnson x1  2274  556  1718  1171  183  194
df.update(x1)
df
                y1     y2      y3      y4     y5     y6
Johnson x1  2274.0  556.0  1718.0  1171.0  183.0  194.0
        x2     0.0    0.0     0.0     0.0    0.0    0.0
        x3     0.0    0.0     0.0     0.0    0.0    0.0
        x4     0.0    0.0     0.0     0.0    0.0    0.0
        x5     0.0    0.0     0.0     0.0    0.0    0.0
Jackson x1     0.0    0.0     0.0     0.0    0.0    0.0
        x2     0.0    0.0     0.0     0.0    0.0    0.0
        x3     0.0    0.0     0.0     0.0    0.0    0.0
        x4     0.0    0.0     0.0     0.0    0.0    0.0
        x5     0.0    0.0     0.0     0.0    0.0    0.0
Smith   x1     0.0    0.0     0.0     0.0    0.0    0.0
        x2     0.0    0.0     0.0     0.0    0.0    0.0
        x3     0.0    0.0     0.0     0.0    0.0    0.0
        x4     0.0    0.0     0.0     0.0    0.0    0.0
        x5     0.0    0.0     0.0     0.0    0.0    0.0

我在这方面的过度思考几乎令人尴尬,谢谢我在这方面的过度思考几乎令人尴尬,谢谢