Python 使用pandas从现有数据帧中使用唯一元素生成随机数据帧
我正试图用熊猫做一些数据操作。我有一个excel文件,有两列Python 使用pandas从现有数据帧中使用唯一元素生成随机数据帧,python,pandas,random,logic,Python,Pandas,Random,Logic,我正试图用熊猫做一些数据操作。我有一个excel文件,有两列x,y。x中的元素数对应于它与列y中的元素建立的连接数(n\u箭头)。列x中唯一元素的数量对应于唯一点的数量(n_节点)。我想做的是生成一个随机数据帧(10^4次),其中包含列x中的唯一元素和列y中的元素?我试图处理的代码已附加。如有任何建议,将不胜感激 import pandas as pd import numpy as np df = pd.read_csv('/home/amit/Desktop/playing_with_pan
x,y
。x
中的元素数对应于它与列y
中的元素建立的连接数(n\u箭头
)。列x
中唯一元素的数量对应于唯一点的数量(n_节点
)。我想做的是生成一个随机数据帧(10^4次),其中包含列x
中的唯一元素和列y
中的元素?我试图处理的代码已附加。如有任何建议,将不胜感激
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)
这里有两种方法:
解决方案1:如果需要将x
和y
值独立随机:
给出一个示例df
(谢谢@AmiTavory):
使用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\u of_simulated\u 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)}
或者像这样的词典理解:
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
你能展示一下你的数据帧的
头部
,以及一个“模拟数据帧”的样本吗?@添加了数据帧的图片。所谓模拟数据帧,我指的是随机改变x列和y列中元素的位置10000次。哦,我认为应该保持x->y的对应关系。我明白了,你对它的理解不同。请不要误会我-我不一定认为你的解释是错误的,只是我没有想到。请看编辑,你可以选择最适合你的函数needs@sacul假设你想为x和y元素之间的随机连接生成一个100。我的意思是,从x到y的唯一元素之间有100次随机重排。它会给我100行。我不要100排。我希望保持原始数据帧中相同的行数。但是只需要随机分配100次值