【问题标题】:Match each dictionary value with csv column entry and apply dictionary key to new column将每个字典值与 csv 列条目匹配并将字典键应用于新列
【发布时间】:2022-12-08 00:06:09
【问题描述】:

我想将字典值与 csv 数据框列中的条目匹配,并将相应的字典键放入新列中。

我有一个带有链接的 csv 数据框和六列数字。我有一本包含网站和许多链接的字典。

import pandas as pd
 
# reproducible data
data = {'Link': ['A1', 'B2', 'X7', '8G'],
        'Town1': [0.124052256, 0.939612252, 0.861338299, 0.981016558],
       'Town2': [0.605572804, 0.561737172, 0.479567258, 0.476371433],
       'Town3': [0.41687511, 0.321543551, 0.1243927, 0.097894068],
       'Town4': [0.068305033, 0.280721459, 0.600126058,0.93097328]}
 
# Create DataFrame
df = pd.DataFrame(data)
 
# Print the output.
df

#Dictionary
d = {'Sample1': '[A1, 6H, 8J, A3, 4L]', 'Sample2': '[X7, 8G, 4R]', 'Sample3': '[B2, V6, 8U]' } 

###我想要的是找到字典值和“链接”列中的条目匹配的位置,并使用字典键在同一个 csv 文件上创建一个新列。

这是我尝试过的,它在新列中返回 None

def get_key(node):
    for node in df['Link']:
        if node in d.values():
            return d.keys()


df['Parent'] = df['Link'].apply(lambda x: get_key(x))
df

输出是这样的:

我想要的最后一件事是 .groupby.sum() df['Parent'] 列并制作样本的最终数据透视表和每个“城镇”列中的总和。

决赛桌示例:

【问题讨论】:

  • 您能否提供一个示例:输入 -> 预期输出?
  • 只是好奇,A1 链接的 .1 和 .6 这样的值意味着什么?前两个城镇,在现实世界中?这将有助于激发问题,鼓励直觉理解。 stackoverflow.com/help/how-to-ask“查找字典值和条目...匹配的位置”——请定义“匹配”。另外,帮助我们理解“创建新专栏”的含义。称呼“父母”?这些值是什么意思? stackoverflow.com/help/minimal-reproducible-example 包括一个示例所需的结果数据框将大大有助于解决此类歧义。
  • 看来您的示例有误。 “Sample1”中没有“8G”。不过,还有“8J”。

标签: python pandas dataframe dictionary apply


【解决方案1】:
def matcher(find_this_value):
    your_dict = {'Sample1': ['A1', '6H', '8J', 'A3', '4L'], 'Sample2': ['X7', '8G', '4R'], 'Sample3': ['B2', 'V6', '8U']}
    for key, values in your_dict.items():
       for value in values:
          if find_this_value in v:
             return key

df['dict_key'] = df['Link'].apply(matcher)

【讨论】:

  • 完美,然后 df.groupby('dict_key').sum() 给出最终表。谢谢 !
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2017-09-15
  • 1970-01-01
  • 2022-10-14
  • 2021-01-10
  • 2019-02-24
  • 1970-01-01
相关资源
最近更新 更多