【发布时间】:2017-04-30 17:10:13
【问题描述】:
考虑以下代码:
row1 = [(2,2), (4,4)]
row2 = [(5,5)]
row3 = [10, 20, 30, 40]
row_tuple_list = []
for r1 in row1:
for r2 in row2:
for r3 in row3:
row_tuple_list.append((r1, r2, r3))
row_index = pd.MultiIndex.from_tuples(row_tuple_list, names=['row1', 'row2', 'row3'])
col1 = ['f', 'i']
col2 = ['g', 'h']
col_tuple_list = []
for c1 in col1:
for c2 in col2:
col_tuple_list.append((c1, c2))
col_index = pd.MultiIndex.from_tuples(col_tuple_list, names=['col1', 'col2'])
df = pd.DataFrame(index=row_index, columns=col_index)
生成数据框:
col1 f i
col2 g h g h
row1 row2 row3
(2, 2) (5, 5) 10 NaN NaN NaN NaN
20 NaN NaN NaN NaN
30 NaN NaN NaN NaN
40 NaN NaN NaN NaN
(4, 4) (5, 5) 10 NaN NaN NaN NaN
20 NaN NaN NaN NaN
30 NaN NaN NaN NaN
40 NaN NaN NaN NaN
现在,我想设置此数据框的各个元素。例如,
w=(2,2)
x=(5,5)
y=10
df.loc[(w,x,y),('f','g')] = 200
print(df)
给出:
col1 f i
col2 g h g h
row1 row2 row3
(2, 2) (5, 5) 10 200 NaN NaN NaN
20 NaN NaN NaN NaN
30 NaN NaN NaN NaN
40 NaN NaN NaN NaN
(4, 4) (5, 5) 10 NaN NaN NaN NaN
20 NaN NaN NaN NaN
30 NaN NaN NaN NaN
40 NaN NaN NaN NaN
有没有办法在不显式设置第二行值的情况下执行此操作(因为我知道 row1 和 row2 以相同的频率出现)?
我试过了:
df.loc[(w,slice(None),y),('f','g')] =100
失败了。
【问题讨论】:
标签: python pandas dataframe indexing hierarchical