在for循环中创建新的df库伦

时间:2020-04-02 07:24:46

标签: python pandas sample

我有一个带有'x'列的df,我想从中采样数据并将其存储在新的数据帧df_pull中。我想在for循环中重复此过程,例如10倍。我的问题是:“未定义名称'df_pull'”。当然,这是因为我没有反抗df_pull,但是我如何创建一个空的df。这不可能吗?通过创建很多if列表,我感到非常满意,但是我确信这不是最好的解决方案。

for i in np.arange(10):
    df_pull[[i]] = df['x'].sample(frac=1)

谢谢。

2 个答案:

答案 0 :(得分:2)

将列表理解与concat一起使用,并且对于drop=TrueDataFrame.reset_index也很重要,以避免相同的列值(因为索引alignmenet):

r = np.arange(10)
L = [df['x'].sample(frac=1).reset_index(drop=True) for i in r]
df_pull  = pd.concat(L, axis=1, keys=r)

您的解决方案使用空的DataFrame以及DataFrame.reset_index

df = pd.DataFrame({
         'y':[7,8,9,4,2,3],
         'x':[1,3,5,7,1,0],

})

df_pull = pd.DataFrame()
for i in np.arange(10):
    df_pull[i] = df['x'].sample(frac=1).reset_index(drop=True)

print (df_pull)
   0  1  2  3  4  5  6  7  8  9
0  1  7  1  1  1  5  3  5  3  1
1  7  1  5  5  0  1  1  1  7  7
2  5  0  0  7  1  3  5  3  1  5
3  3  3  3  0  3  0  7  1  1  3
4  0  1  7  1  5  7  1  7  5  1
5  1  5  1  3  7  1  0  0  0  0

答案 1 :(得分:1)

您可以创建一个空的DateFrame 只是

pull_df = pd.DataFrame()

如果您想要与第一个df相同的列

pull_df = pd.DataFrame(columns=df.columns)