我有一个带有大量唯一值的Pandas DataFrame。我想将这些值与更一般的列进行分组。这样,我希望将层次结构添加到数据中,从而使分析更加容易。
起作用的一件事是复制该列并替换值,如下所示:
data.loc[data['new_col'].str.contains('string0|string1'), 'new_col']\
= 'substitution'
但是,我试图找到一种轻松地重现此方法而不为每个条目添加条件的方法。
还尝试通过以下方法成功使用:
我想听听您的建议,以了解如何解决这个问题。
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
答案 0 :(得分:1)
通过将key与list的值交换来创建新字典。接下来,将交换的字典映射到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
注意:我直接将您的字典键用作H
的值,而不是g1
,g2
.....,因为我认为这是足以识别每组值。如果您仍然想要g1
,g2
...,则很容易完成。请让我知道。
我还在代码中将您的字典命名为d