Python 如何从频率表创建pd系列?

Python 如何从频率表创建pd系列?,python,pandas,Python,Pandas,我有我的(整数)值和它们的计数。我怎样才能在此基础上创建一个系列 一个示例数据集是{0:21,1:13,2:5,3:4,4:2,5:3,6:2},我希望这是我制作的系列的value\u counts()的输出 我尝试了np。在concatenate中重复s,但我得到了一个错误,因为它显然无法矢量化 编辑:下面是一个例子来说明问题。正如上面的字典所示,我有21个0、13个1、5个2等等。我希望我的系列看起来像这样:0 0。。。0 1 1 ... 无需多次手动输入相同的数据。最简单的解决方案 最简单

我有我的(整数)值和它们的计数。我怎样才能在此基础上创建一个系列

一个示例数据集是
{0:21,1:13,2:5,3:4,4:2,5:3,6:2}
,我希望这是我制作的系列的
value\u counts()
的输出

我尝试了
np。在
concatenate
中重复
s,但我得到了一个错误,因为它显然无法矢量化

编辑:下面是一个例子来说明问题。正如上面的字典所示,我有21个0、13个1、5个2等等。我希望我的系列看起来像这样:
0 0。。。0 1 1 ... 无需多次手动输入相同的数据。

最简单的解决方案

最简单的解决方案

给予

这就是你想要的吗

import numpy as np
counts = {0:21,1:13,2:5,3:4,4:2,5:3,6:2}

# here we create it
values = pd.Series(np.hstack([[v]*c for v,c in counts.items()]))

# check
values.value_counts()
给予

这就是你想要的吗

import numpy as np
counts = {0:21,1:13,2:5,3:4,4:2,5:3,6:2}

# here we create it
values = pd.Series(np.hstack([[v]*c for v,c in counts.items()]))

# check
values.value_counts()
输出


0    21
1    13
2     5
3     4
5     3
6     2
4     2
dtype: int64
输出


0    21
1    13
2     5
3     4
5     3
6     2
4     2
dtype: int64

您也可以使用itertools进行此操作

from itertools import chain, repeat

import pandas as pd

if __name__ == '__main__':
    frequencies = {0: 21, 1: 13, 2: 5, 3: 4, 4: 2, 5: 3, 6: 2}
    series = pd.Series(data=chain.from_iterable((repeat(x, count)) for x, count in frequencies.items()))
    print(series)

您也可以使用itertools进行此操作

from itertools import chain, repeat

import pandas as pd

if __name__ == '__main__':
    frequencies = {0: 21, 1: 13, 2: 5, 3: 4, 4: 2, 5: 3, 6: 2}
    series = pd.Series(data=chain.from_iterable((repeat(x, count)) for x, count in frequencies.items()))
    print(series)

您可以使用熊猫系列方法:

如果您想要比公认的解决方案更快的解决方案,则可以使用numpy:


您可以使用熊猫系列方法:

如果您想要比公认的解决方案更快的解决方案,则可以使用numpy:


你能澄清一下你目前的数据是什么,你的预期输出是什么吗?@IoaTzimas我补充了一点解释。希望能有所帮助。@zareami10让我知道它是否有效。你能澄清一下你当前的数据和预期的输出吗?@IoaTzimas我补充了一点解释。希望有帮助。@zareami10如果有,请告诉我works@zareami10很高兴你喜欢。享受吧@很高兴你喜欢它。享受
values = pd.Series(counts.keys()).repeat(list(counts.values()))

values.value_counts()

0    21
1    13
2     5
3     4
5     3
6     2
4     2
dtype: int64
values = pd.Series(np.repeat(list(counts.keys()), list(counts.values())))
values.value_counts()

0    21
1    13
2     5
3     4
5     3
6     2
4     2
dtype: int64