gpt4 book ai didi

python pandas用iterrows迭代数据帧行很慢,可以以某种方式替换吗?

转载 作者:行者123 更新时间:2023-12-04 09:38:07 25 4
gpt4 key购买 nike

我有以下问题。我有 2 个数据帧,一个只有 0 和列名作为我从不同文本文件中知道它们的属性,另一个将第一个数据帧中的列作为值和 NaN 作为每行的值。现在,我想用 0 在数据帧上设置 1,其中第二个数据帧值具有该属性。

第二个数据框看起来像这样。

enter image description here

第一个数据框看起来像这样。

enter image description here

我想把第一个数据框改成这个。

enter image description here

for index, row in df.iterrows():
for element in row:
if pd.isnull(element) : break
# row index, element column so we change the value of the column thats named element from 0 to 1.
Final_Df.at[index,element] = 1

这是我用来实现这一目标的代码。 df 是具有 NaN 值的第二个数据帧,而 Final_Df 是具有 0 的第一个数据帧。有没有办法通过不使用 iterrows 以某种方式更快地实现它,因为数据集更大?任何帮助将不胜感激,如果问题不好,我很抱歉。提前致谢!

最佳答案

想法是为列表理解中的每一行创建字典,传递给 DataFrame构造函数,将缺失值替换为 0和上次使用 DataFrame.reindex 用于移除 NaN列,更改订单并将不存在的值添加到由 0 填充的列中:

codes = ['ca', 'ct', 'dc', 'fl', 'hi', 'il', 'ky', 'la', 'md', 'mi', 'ms', 'nc', 'pr']

Final_Df = (pd.DataFrame([dict.fromkeys(x, 1) for x in df.to_numpy()])
.fillna(0)
.astype(np.int8)
.reindex(codes, axis=1, fill_value=0))

另一种解决方案:

使用 get_dummies max每列的值(始终为 0,1 )值,然后是 DataFrame.reindex 用于更改列的顺序并添加一些由 0 填充的不存在的列:
codes = ['ca', 'ct', 'dc', 'fl', 'hi', 'il', 'ky', 'la', 'md', 'mi', 'ms', 'nc', 'pr']

df = (pd.get_dummies(df, prefix='', prefix_sep='')
.max(axis=1, level=0)
.reindex(codes, axis=1, fill_value=0))
print (df)

关于python pandas用iterrows迭代数据帧行很慢,可以以某种方式替换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62457975/

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