我有一个数据集,看起来如下:
ID I_Code Date_2 Date_1 c_b Count
FT-56832 2 01/09/2019 02/08/2019 1000 6
FT-93828 1 01/09/2019 03/08/2019 44 31
FT-13853 2 02/09/2019 03/08/2019 79 31
FT-18858 3 02/09/2019 04/08/2019 30 47
FT-56832 2 01/09/2019 04/08/2019 35 47
FT-19010 2 03/09/2019 04/08/2019 53 47
FT-62064 5 02/09/2019 04/08/2019 79 47
FT-94494 4 03/09/2019 04/08/2019 96 47
FT-73594 2 03/09/2019 04/08/2019 89 47
FT-78590 1 01/09/2019 05/08/2019 66 30
FT-14296 4 01/09/2019 05/08/2019 20 30
FT-82529 3 03/09/2019 05/08/2019 95 30
FT-33266 3 04/09/2019 05/08/2019 80 30
FT-62064 5 02/09/2019 05/08/2019 80 30
FT-94494 4 03/09/2019 05/08/2019 97 30我希望以这样的方式展开数据集,即数据集中的总条目对应于count列,例如(Date_1、Date_2、ID、I_Code)有一个计数,计数代表行数,就像第一行应该扩展到31个条目,在这里我们需要创建另一个列c_b1,并且c_b1的求和应该等于c_b,例如,在示例中是34。
多亏了@jezrael
我能够使用以下代码随机划分它:
from numpy.random import multinomial
def func(x):
N = np.random.randint(5, 10, size=1)[0]
print (N)
return multinomial(x, [1./N] * N)
a = df.join(pd.concat({k: pd.Series(func(v)) for k, v in df['value'].items()}).reset_index(level=1, drop=True).rename('A'))
print (a) 函数v生成计数的位置。现在我已经有了计数,并尝试使用以下方法:
a = df.join(pd.concat({k: pd.Series(df['count']) for k, v in df['value'].items()}).reset_index(level=1, drop=True).rename('A'))
print (a) 但这并不能提供产出。
预期产出实例:
预期输入:
ID I_code date_1 date_2 value count
FT-56832 2 01/09/2019 02/08/2019 1000 6预期输出:
ID I_code date_1 date_2 c_b1 c_b
FT-56832 2 1/09/2019 2/08/2019 155 1000
FT-56832 2 1/09/2019 2/08/2019 170 1000
FT-56832 2 1/09/2019 2/08/2019 165 1000
FT-56832 2 1/09/2019 2/08/2019 174 1000
FT-56832 2 1/09/2019 2/08/2019 175 1000
FT-56832 2 1/09/2019 2/08/2019 161 1000注意,在c_b1的分布上没有对比,它可以随机化。
有人能帮上忙吗。
谢谢
发布于 2019-10-24 19:59:54
IIUC,试试这个:
def f(x):
i = np.random.random(len(x))
j = i/sum(i) * x
return j
df1 = df.reindex(df.index.repeat(df['count']))
df1['value'] = df1.groupby('ID')['value'].transform(f)
print(df1)输入:
ID I_code date_1 date_2 value count
FT-56832 2 01/09/2019 02/08/2019 1000 6
FT-56831 3 01/09/2019 02/08/2019 500 4输出:
ID I_code date_1 date_2 value count
0 FT-56832 2 01/09/2019 02/08/2019 94.921398 6
0 FT-56832 2 01/09/2019 02/08/2019 317.340230 6
0 FT-56832 2 01/09/2019 02/08/2019 289.495352 6
0 FT-56832 2 01/09/2019 02/08/2019 135.989723 6
0 FT-56832 2 01/09/2019 02/08/2019 146.207420 6
0 FT-56832 2 01/09/2019 02/08/2019 16.045878 6
1 FT-56831 3 01/09/2019 02/08/2019 125.931392 4
1 FT-56831 3 01/09/2019 02/08/2019 147.763965 4
1 FT-56831 3 01/09/2019 02/08/2019 158.801276 4
1 FT-56831 3 01/09/2019 02/08/2019 67.503367 4https://stackoverflow.com/questions/58547198
复制相似问题