我有一个看起来像这样的数据框A
value Frequency
0.1 3
0.2 2
我想将其转换为如下所示的数据框B
Sample
0.1
0.1
0.1
0.2
0.2
简单地说,数据帧A是样本及其频率(重复)。数据框B实际上正在扩展它。有没有简单的方法可以做到这一点?
我做了什么(上面复制的最小工作示例):
X = pd.DataFrame([(0.1,3),(0.2,2)],columns=['value','Frequency'])
Sample = list()
for index, row in X.iterrows():
Value = row['value']
Freq = int(row['Frequency'])
Sample = Sample + [Value]*Freq
Data = pd.DataFrame({'Sample':pd.Series(Sample)})
答案 0 :(得分:2)
您可以使用Series.repeat
,其中repeats
参数也可以是一系列整数:
df.value.repeat(df.Frequency).reset_index(drop=True).to_frame('Sample')
Sample
0 0.1
1 0.1
2 0.1
3 0.2
4 0.2
答案 1 :(得分:1)
使用repeat
>>> df['value'].repeat(df.Frequency)
0 0.1
0 0.1
0 0.1
1 0.2
1 0.2
Name: value, dtype: float64
或使用创建新的数据框
>>> pd.DataFrame(df['value'].repeat(df.Frequency).to_numpy(),columns=["Sample"])
Sample
0 0.1
1 0.1
2 0.1
3 0.2
4 0.2
答案 2 :(得分:0)
您可以使用 重新索引+重复
X = X.reindex(X.index.repeat(X.Frequency))