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
我在这方面的过度思考几乎令人尴尬,谢谢我在这方面的过度思考几乎令人尴尬,谢谢