Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pandas从现有数据帧中使用唯一元素生成随机数据帧_Python_Pandas_Random_Logic - Fatal编程技术网

Python 使用pandas从现有数据帧中使用唯一元素生成随机数据帧

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

我正试图用熊猫做一些数据操作。我有一个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_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次值