我想在我的pandas数据帧中创建一个value_counts列

use*_*989 43 python merge pandas

我对R更熟悉,但我想知道是否有办法在熊猫中做到这一点.我想从我的一个dataframe列创建唯一值的计数,然后将包含这些计数的新列添加到我的原始数据框.我尝试过几种不同的东西.我创建了一个pandas系列,然后使用value_counts方法计算计数.我试图将这些值合并回原始数据帧,但我要合并的键是在索引(ix/loc)中.任何建议或解决方案将不胜感激

Color Value
Red   100
Red   150
Blue  50
Run Code Online (Sandbox Code Playgroud)

我想要回报一些类似的东西

Color Value Counts
Red   100   2
Red   150   2 
Blue  50    1
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 51

df['Counts'] = df.groupby(['Color'])['Value'].transform('count')
Run Code Online (Sandbox Code Playgroud)

例如,

In [102]: df = pd.DataFrame({'Color': 'Red Red Blue'.split(), 'Value': [100, 150, 50]})

In [103]: df
Out[103]: 
  Color  Value
0   Red    100
1   Red    150
2  Blue     50

In [104]: df['Counts'] = df.groupby(['Color'])['Value'].transform('count')

In [105]: df
Out[105]: 
  Color  Value  Counts
0   Red    100       2
1   Red    150       2
2  Blue     50       1
Run Code Online (Sandbox Code Playgroud)

请注意,transform('count')忽略NaN.如果你想计算NaNs,请使用transform(len).


对于匿名编辑:如果您在使用transform('count')它时遇到错误,可能是因为您的Pandas版本太旧了.以上工作与熊猫版本0.15或更新.

  • 尝试只选择一列进行转换,即df.groupby(['Color'])[<colname>].transform('count') (2认同)

Zak*_*akS 8

另一种选择:

z = df['Color'].value_counts 

z1 = z.to_dict() #converts to dictionary

df['Count_Column'] = df['Color'].map(z1) 
Run Code Online (Sandbox Code Playgroud)

此选项将为您提供一列具有重复计数值的列,对应于“颜色”列中每个值的频率。

  • 可以简化为:df ['Count_Column'] = df ['Color']。map(df ['Color']。value_counts())。您可以使用系列进行映射(不一定是字典) (6认同)

Acu*_*nus 7

此答案Series.mapSeries.value_counts. 它使用 Pandas 1.1 进行了测试。

df['counts'] = df['attribute'].map(df['attribute'].value_counts())
Run Code Online (Sandbox Code Playgroud)

信用:评论sacuL


1''*_*1'' 5

df['Counts'] = df.Color.groupby(df.Color).transform('count')

您可以对任何系列执行此操作:将其单独分组并调用transform('count')

>>> series = pd.Series(['Red', 'Red', 'Blue'])
>>> series.groupby(series).transform('count')
0    2
1    2
2    1
dtype: int64
Run Code Online (Sandbox Code Playgroud)