解开熊猫的频率表

时间:2020-05-13 08:06:07

标签: python pandas

我有一个看起来像这样的数据框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)})

3 个答案:

答案 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))