如何将value_counts()的结果追加至原始DataFrame?
如何将
value_counts()的结果匹配追加到原始DataFrame? 我手头有这样一个DataFrame:
| Open | High | Low | Close | |
|---|---|---|---|---|
| 0 | 0.001268 | 0.001277 | 0.001266 | 0.001271 |
| 1 | 0.001268 | 0.001269 | 0.001265 | 0.001266 |
| 2 | 0.001265 | 0.001265 | 0.001242 | 0.001254 |
| 3 | 0.001253 | 0.001271 | 0.001244 | 0.001251 |
| 4 | 0.001253 | 0.001259 | 0.001249 | 0.001257 |
| 5 | 0.001257 | 0.001260 | 0.001241 | 0.001248 |
当我运行df["Open"].value_counts()时,得到各Open值的出现次数:
0.001253 2 0.001268 2 0.001265 1 0.001257 1 Name: Open, dtype: int64
我希望把这些计数结果作为新列Open_count追加到原始DataFrame中,最终得到如下格式的结果:
| Open | High | Low | Close | Open_count | |
|---|---|---|---|---|---|
| 0 | 0.001268 | 0.001277 | 0.001266 | 0.001271 | 2 |
| 1 | 0.001268 | 0.001269 | 0.001265 | 0.001266 | 2 |
| 2 | 0.001265 | 0.001265 | 0.001242 | 0.001254 | 1 |
| 3 | 0.001253 | 0.001271 | 0.001244 | 0.001251 | 2 |
| 4 | 0.001253 | 0.001259 | 0.001249 | 0.001257 | 2 |
| 5 | 0.001257 | 0.001260 | 0.001241 | 0.001248 | 1 |
最简单的解决方法
你可以直接用Pandas的map()方法来实现这个需求,一行代码就能搞定:
df["Open_count"] = df["Open"].map(df["Open"].value_counts())
原理说明
df["Open"].value_counts()会返回一个Series,其中索引是Open列的唯一值,值是对应的出现次数。map()方法会遍历原始DataFrame的每一行Open值,去匹配这个Series的索引,然后把对应的次数赋值给新列的该行。这样就完美实现了每个Open值和它的出现次数一一对应。
处理浮点数精度问题(可选)
如果你的数据存在浮点数精度导致的匹配问题(比如看起来相同的数值因为小数位数存储差异被当成不同值),可以先对Open列做精度统一处理,再进行映射:
# 统一保留6位小数,根据你的数据调整位数 df["Open_count"] = df["Open"].round(6).map(df["Open"].round(6).value_counts())
内容的提问来源于stack exchange,提问作者Nazim Kerimbekov
相关产品推荐
相关产品推荐

