我有一个numpy.ndarray
,其中包含17520行和1000列。 np.ndarray
仅具有两个值[0,0.05]
。我想修改值为0.05的单元格,以便在0到0.05之间进行随机选择。为了做到这一点,我使用了帖子推荐的以下功能
Random choice over specific values of a DF
import pandas as pd
df = pd.DataFrame(df)
df.update(np.random.choice([0, 0.05], size=df.shape), filter_func=lambda x: x==0.05)
此解决方案有效,但是,我还有另一个pandas.DataFrame
对象df1
,并且需要创建另一个数据框对象。新数据帧df_new
是这两个数据帧不同的结果。我使用简单的操作:
df_new = df1 - df
但是,df_new
的结果是一个具有不同维度(17520行,2000列)和NAN
值的数据框。
您是否知道为什么会这样?
谢谢
答案 0 :(得分:1)
df
和df1
的列不同。
顺便说一下,与update
相对,以下内容也适用:
df[df == 0.05] = np.random.choice([0., 0.05], size=df.shape)
答案 1 :(得分:1)
不确定您的问题出在哪里,因为您没有提供有关如何构建DataFrame的详细信息。无论如何,您实际上不必为此使用DataFrames:NumPy当然可以执行您需要做的事情。这是您可以使用的示例代码:
import numpy as np
# Randomly create the initial arrays, just to prove the code is OK
df1 = np.random.choice([0.0, 0.05], size=(17520,1000))
df2 = np.random.choice([0.0, 0.05], size=(17520,1000))
# Modify them
w1 = np.where(df1 == 0.05)
w2 = np.where(df2 == 0.05)
df1[w1] = np.random.choice([0.0, 0.05], size=len(w1[0]))
df2[w2] = np.random.choice([0.0, 0.05], size=len(w2[0]))
df_new = df1 - df2