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或更新.
另一种选择:
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)
此选项将为您提供一列具有重复计数值的列,对应于“颜色”列中每个值的频率。
此答案Series.map与Series.value_counts. 它使用 Pandas 1.1 进行了测试。
df['counts'] = df['attribute'].map(df['attribute'].value_counts())
Run Code Online (Sandbox Code Playgroud)
信用:评论由sacuL
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)