我有一个类似的数据集:
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),有一个count,而count代表行数,就像第一行应该扩展到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的分布没有约束,可以将其随机化。
任何人都可以提供帮助。
谢谢
答案 0 :(得分:0)
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 4