我有一个熊猫数据框位置
row column
1 3 Brazil
2 6 USA
3 3 USA
4 7 Canada
和另一个 x
Brazil Canada USA
1 False False False
2 False False False
3 False False False
4 False False False
5 False False False
6 False False False
7 False False False
我想根据第一个中的值填充第二个,所以结果是:
Brazil Canada USA
1 False False False
2 False False False
3 True False True
4 False False False
5 False False False
6 False False True
7 False True False
我正在使用 iterrows()
for i, r in positions.iterrows():
x.at[r['row'],r['column']] = True
有更快的方法吗?
答案 0 :(得分:4)
我将用crosstab
做update
x.update(pd.crosstab(df.row,df.column).eq(1))
x
Out[44]:
Brazil Canada USA
1 False False False
2 False False False
3 True False True
4 False False False
5 False False False
6 False False True
7 False True False
答案 1 :(得分:2)
您可以旋转positions
表:
s = (df.assign(dummy=True).set_index(['row','column'])
['dummy'].unstack(fill_value=False)
)
x |= s
输出:
Brazil Canada USA
1 False False False
2 False False False
3 True False True
4 False False False
5 False False False
6 False False True
7 False True False
答案 2 :(得分:2)
searchsorted
和带有iloc
的切片分配这假设index
中的columns
和x
已排序。
我们将使用iloc
和头寸元组来分配True
的值
i = tuple(x.index.searchsorted(df.row))
j = tuple(x.columns.searchsorted(df.column))
x.iloc[[i, j]] = True
x
Brazil Canada USA
1 False False False
2 False False False
3 True False True
4 False False False
5 False False False
6 False False True
7 False True False