gpt4 book ai didi

pandas - 根据系列和数据帧中的内容生成 boolean 数据帧

转载 作者:行者123 更新时间:2023-12-04 10:34:22 25 4
gpt4 key购买 nike

我有:

 df = pd.DataFrame(
[
[22, 33, 44],
[55, 11, 22],
[33, 55, 11],
],
index=["abc", "def", "ghi"],
columns=list("abc")
) # size(3,3)

和:
unique = pd.Series([11, 22, 33, 44, 55]) # size(1,5)

然后我基于 unique 创建一个新的 df和 df , 以便:
df_new = pd.DataFrame(index=unique, columns=df.columns) # size(5,3)

从这个新创建的 df,我想基于 unique 创建一个新的 boolean df和 df ,所以最终结果是:
 df_new = pd.DataFrame(
[
[0, 1, 1],
[1, 0, 1],
[1, 1, 0],
[0, 0, 1],
[1, 1, 0],
],
index=unique,
columns=df.columns
)

这个新的 df 是真还是假,取决于该值是否存在于原始数据帧中。例如,第一列有三个值:[22, 55, 33]。在维度为 (5,3) 的 df 中,第一列将是: [0, 1, 1, 0, 1] 即 [0, 22, 33, 0 , 55]

我试过 filter2 = unique.isin(df)但这不起作用,也不为空。我尝试应用过滤器,但返回的尺寸不正确。我怎样才能做到这一点?

最佳答案

使用 DataFrame.stack DataFrame.reset_index , DataFrame.pivot ,然后通过 DataFrame.notna 检查是否没有缺失值, 为 True->1 强制转换为整数和 False->0通过 DataFrame.rename_axis 映射和最后删除索引和列名称:

df_new = (df.stack()
.reset_index(name='v')
.pivot('v','level_1','level_0')
.notna()
.astype(int)
.rename_axis(index=None, columns=None))
print (df_new)
a b c
11 0 1 1
22 1 0 1
33 1 1 0
44 0 0 1
55 1 1 0

Helper Series 不是必需的,但如果有更多值或需要通过 helper Series 更改顺序,请使用 add DataFrame.reindex :
#added 66
unique = pd.Series([11, 22, 33, 44, 55,66])

df_new = (df.stack()
.reset_index(name='v')
.pivot('v','level_1','level_0')
.reindex(unique)
.notna()
.astype(int)
.rename_axis(index=None, columns=None))
print (df_new)
a b c
11 0 1 1
22 1 0 1
33 1 1 0
44 0 0 1
55 1 1 0
66 0 0 0

关于pandas - 根据系列和数据帧中的内容生成 boolean 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60259988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com