【发布时间】:2019-10-14 09:03:14
【问题描述】:
我们有一个多索引 DataFrame df
0 1 2
Name Stock
Tom AAPL 0 0 0
GOOG 0 0 0
NFLX 0 0 0
John AAPL 0 0 0
GOOG 0 0 0
NFLX 0 0 0
还有一个系列s
AAPL 99
NFLX 11
dtype: int64
问题:我们如何使用来自系列s 的值设置数据框df 的列2 中的值?
换句话说,只有数据帧df 中的索引('Tom', 'AAPL') 和('Tom', 'NFLX) 的值应分别设置为99 和11。 ('Tom', 'GOOG') 应该保持不变。
尝试失败
idx = pd.IndexSlice
df.loc[idx['Tom', :], 2] = s
print(df)
0 1 2
Name Stock
Tom AAPL 0 0 NaN
GOOG 0 0 NaN
NFLX 0 0 NaN
John AAPL 0 0 0.0
GOOG 0 0 0.0
NFLX 0 0 0.0
重现问题的代码
stocks = ['AAPL', 'GOOG', 'NFLX']
names = ['Tom', 'John']
midx = pd.MultiIndex.from_product([names, stocks], names=['Name','Stock'])
df = pd.DataFrame(index=midx)
for i in range(3):
df[i] = [0,0,0,0,0,0]
print(df)
s = pd.Series([99, 11], index=['AAPL','NFLX'])
print('\n', s, '\n')
idx = pd.IndexSlice
df.loc[idx['Tom', :], 2] = s
print(df)
【问题讨论】:
-
John, AAPL和John, NFLX不也应该改吗? -
更改仅适用于
Tom,我尝试使用df.loc[idx['Tom', :], 2] = s指定
标签: python python-3.x pandas dataframe multi-index