python - 当在给定行中找到其中一个值时,使用字典的键作为行值的新 DataFrame 列
问题描述
我有一个带有大量唯一值的 Pandas DataFrame。我想用一个更通用的列对这些值进行分组。通过这样做,我希望将层次结构添加到我的数据中,从而使分析更容易。
有效的一件事是复制列并替换值如下:
data.loc[data['new_col'].str.contains('string0|string1'), 'new_col']\
= 'substitution'
但是,我正在尝试找到一种无需为每个条目添加条件即可轻松重现此内容的方法。
还尝试使用以下方法但未成功:
- dict.items()
- pd.df.replace() 这些尝试对我来说是徒劳的。
我想听听您的建议,以了解如何处理这个问题。
import pandas as pd
# My DataFrame looks similar to this:
>>> df = pd.DataFrame({'A': ['a', 'w', 'c', 'd', 'z']})
# The dictionary were I store the generalization:
>>> subs = {'g1': ['a', 'b', 'c', 'd'],
... 'g2': ['w', 'x', 'y', 'z']}
>>> df
A H
0 a g1
1 w g2
2 c g1
3 d g1
4 z g2
解决方案
通过将键与列表的值交换来创建一个新的字典。接下来,df.A
使用交换的字典进行映射。
swap_dict = {x: k for k, v in d.items() for x in v}
Out[1054]:
{'a': 's1',
'b': 's1',
'c': 's1',
'd': 's1',
'w': 's2',
'x': 's2',
'y': 's2',
'z': 's2'}
df['H'] = df.A.map(swap_dict)
Out[1058]:
A H
0 a s1
1 w s2
2 c s1
3 d s1
4 z s2
注意:我直接使用您的 dict 的键作为值H
而不是g1
, g2
,.... 因为我认为识别每组值就足够了。如果你还想要g1
, g2
,..., 很容易实现。让我知道。我还在我的代码中
命名了你的字典d
推荐阅读
- python - 浮点数的截断
- python - RobotFramework - 通过 Open Browser 关键字添加 chrome 扩展
- c# - 使用 GMail 服务设置端口/SSL/超时
- javascript - 搜索过滤器继续搜索所有类别 Jquery
- laravel - 使用未定义的常量布局 - 假定为“布局”(这将在 PHP 的未来版本中引发错误)
- javascript - 在创建新窗口的 JS 中访问/权限被拒绝
- java - 当只需要使用多态指定一个子类时如何设计?
- typo3 - Typo3 中分组新闻项目的格式月份
- python - BeautifulSoup 返回空跨度元素?
- c# - 如何从代理控制器正确地将数据返回给我的客户端