我有一个像这样的数据框,
a b c
0 1 6 11
1 2 7 12
2 3 8 13
3 4 9 14
4 5 10 15
,另一个数据框看起来像这样,
column index
0 a 0
1 b 2
2 c 4
在第二个数据框中它包含索引和列,从这个df我想访问第一个df并将此[row,column]值替换为1996.
我试过了,
df.at[df_index['index'],df_index['column']]=1996
a b c
0 1996 1996 1996
1 2 7 12
2 1996 1996 1996
3 4 9 14
4 1996 1996 1996
但没有按预期工作,
当我尝试这样做时,它会起作用,
for v in df_index.values:
df.at[v[1],v[0]]=1996
a b c
0 1996 6 11
1 2 7 12
2 3 1996 13
3 4 9 14
4 5 10 1996
问题:
为什么我的第一次尝试失败
以pythonic方式实现此目标的最小方法是什么。
答案 0 :(得分:1)
pd.DataFrame.at
和pd.DataFrame.iat
用于访问和设置标量值。因此,您需要遍历(行,列)标签的每个组合以通过这些方法设置值。您无法将系列或数组提供给这些索引器。
一种可能性是提取numpy
数组表示,使用矢量化索引来更新数组,然后输入pd.DataFrame
:
vals = df.values
cols = df.columns.get_loc
vals[df_index['index'], df_index['column'].map(cols)] = 1996
res = pd.DataFrame(vals, index=df.index, columns=df.columns)
print(res)
a b c
0 1996 6 11
1 2 7 12
2 3 1996 13
3 4 9 14
4 5 10 1996