我正在尝试使用pandas进行一些数据操作。我有一个包含两列x,y
的excel文件。 x
中的元素数对应于它与列n_arrows
中的元素所做的连接数(y
)。列x
中的唯一元素数对应于唯一点数(n_nodes
)。我想要做的是使用column x
中的唯一元素和column y
中的元素生成一个随机数据帧(10 ^ 4次)?我试图处理的代码是附加的。任何建议将不胜感激
import pandas as pd
import numpy as np
df = pd.read_csv('/home/amit/Desktop/playing_with_pandas.csv')
num_nodes = df.drop_duplicates(subset='x', keep="last")
n_arrows = [32] #32 rows corresponds to 32
n_nodes = [10]
n_arrows_random = np.random.randn(df.x)
答案 0 :(得分:1)
以下是两种方法:
解决方案1 :如果您需要x
和y
值独立随机:
给出样本df
(感谢@AmiTavory):
df = pd.DataFrame({'x': [1, 1, 1, 2], 'y': [1, 2, 3, 4]})
使用numpy.random.choice
,您可以选择x
列中的随机值和y
列中的随机值:
def simulate_df(df, size_of_simulated_df):
return pd.DataFrame({'x':np.random.choice(df.x, size_of_simulated_df),
'y':np.random.choice(df.y, size_of_simulated_df)})
>>> simulate_df(df, 10)
x y
0 1 3
1 1 3
2 1 4
3 1 4
4 2 1
5 2 3
6 1 2
7 1 4
8 1 2
9 1 3
函数simulate_df
返回从x
和y
列中的原始数据框中采样的随机值。模拟数据框的大小可以由参数size_of_simulated_df
控制,该参数应该是一个表示所需行数的整数。
解决方案2 :根据您的评论,根据您的任务,您可能希望返回随机行的数据框,维护x-> y对应。这是一种矢量化的pandas
方法:
def simulate_df(df=df, size_of_simulated_df=10):
return df.sample(size_of_simulated_df, replace=True).reset_index(drop=True)
>>> simulate_df()
x y
0 1 2
1 2 4
2 2 4
3 2 4
4 1 1
5 1 3
6 1 3
7 1 1
8 1 1
9 1 3
指定模拟的数据框以供将来参考:
在您想要对模拟数据帧进行某种计算的情况下,我建议使用这样的循环将它们保存到某种字典结构中:
dict_of_dfs = {}
for i in range(100):
dict_of_dfs['df'+str(i)] = simulate_df(df, len(df))
或者像这样的词典理解:
dict_of_dfs = {'df'+str(i): simulate_df(df, (len(df))) for i in range(100)}
然后,您可以像访问任何字典值一样访问任何一个模拟数据框:
# Access the 48th simulated dataframe:
>>> dict_of_dfs['df47']
x y
0 1 4
1 2 1
2 1 4
3 2 3