pandas数据框中 `value_counts()` 的相反操作是什么?

3
从非唯一的pandas系列开始,可以通过使用`value_counts()`方法来计算每个唯一值的数量。
>> col = pd.Series([1.0, 1.0, 2.0, 3.0, 3.0, 3.0])

0    1.0
1    1.0
2    2.0
3    3.0
4    3.0
5    3.0
dtype: object

>> stat = col.value_counts()
>> stat
3.0    3
1.0    2
2.0    1
dtype: int64

但是,如果从两列数据的数据框开始,其中一列包含唯一值,另一列包含其出现次数(例如前面例子中的stat)。如何将这些扩展为单列。

因为我想计算此类数据框中数据的中位数、均值等等,所以我认为描述单列比两列更容易。或者是否有任何方法可以直接描述“value_count”数据框而不需要扩展数据?

# turn `stat` into col ???

>> col.describe()
count    6.000000
mean     2.166667
std      0.983192
min      1.000000
25%      1.250000
50%      2.500000
75%      3.000000
max      3.000000 

添加测试数据

>> df = pd.DataFrame({"Name": ["A", "B", "C"], "Value": [1,2,3], "Count": [2, 10, 2]})
>> df
  Name  Value  Count
0    A      1      2
1    B      2      5
2    C      3      2

df2 = _reverse_count(df)
>> df2
  Name  Value 
0    A      1 
1    A      1
2    B      2 
3    B      2
4    B      2  
5    B      2  
6    B      2  
7    B      2
8    C      3
9    C      3  

你能澄清一下 df 的预期输出是什么吗?重复第0行两次,第1行十次,第2行两次? - fmarm
@fmarm 确切的。我已经更新了测试示例。 - Chang Ye
1
我认为我已经找到了解决方案,我更新了我的答案。 - fmarm
1个回答

8
你可以使用来自numpyrepeat函数。
import pandas as pd
import numpy as np
col = pd.Series([1.0, 1.0, 2.0, 3.0, 3.0, 3.0])
stats=col.value_counts()
pd.Series(np.repeat(stats.index,stats))
# 0    3.0
# 1    3.0
# 2    3.0
# 3    1.0
# 4    1.0
# 5    2.0
# dtype: float64

更新:

对于多列,您可以使用以下方式:

df.loc[df.index.repeat(df['Count'])]

v 是答案中的单独一列。我的目标是操作一个多列数据框,并保留其他列。很抱歉没有在问题中明确说明这一点。但这个解决方案可以运作,我只需要做一些小修改,非常感谢。 - Chang Ye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接