您可以通过 pandas.DataFrame.values
访问DataFrame的底层NumPy数组,并在转换索引之后直接使用位置索引进行赋值:
cols = pd.Series(range(df.shape[1]), index=df.columns) # 创建列编号系列
idx = pd.Series(range(df.shape[0]), index=df.index) # 创建行编号系列
df.values[idx.reindex(ix), cols.reindex(iy)] = 1 # 使用重新索引后的行和列编号对数组赋值
最小示例:
# 输入数据框示例
df = pd.DataFrame(index=['a', 'b', 'c'], columns=['A', 'B', 'C'])
ix = ['a', 'b', 'c'] # 要赋值的行标签
iy = ['A', 'C', 'A'] # 要赋值的列标签
# 执行上述操作后的输出
A B C
a 1 NaN NaN
b NaN NaN 1
c 1 NaN NaN
前一个回答方案
直接通过位置索引赋值到NumPy数组:
df = pd.DataFrame(index=range(5), columns=range(5)) # 创建一个5x5的DataFrame
ix = [1, 2, 4] # 行位置索引
iy = [1, 3, 2] # 列位置索引
df.values[ix, iy] = 1 # 在给定的位置处赋值为1
# 执行上述操作后的输出
0 1 2 3 4
0 NaN NaN NaN NaN NaN
1 NaN 1 NaN NaN NaN
2 NaN NaN NaN 1 NaN
3 NaN NaN NaN NaN NaN
4 NaN NaN 1 NaN NaN