簡體   English   中英

當在給定行中找到字典值時,使用字典鍵作為行值的新DataFrame列

[英]New DataFrame column using the key of a dictionary as row value when one of it's values is found in a given row

我有一個帶有大量唯一值的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

通過將鍵與list值交換來創建新的字典。 接下來,將df.A與已交換的dict映射。

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值,而不是g1g2 ,....,因為我認為足以識別每組值。 如果您仍然想要g1g2 ,...,則很容易實現。 請讓我知道。
我在代碼中也將您的字典命名為d

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM