pandas dataframe列中的字典理解

42fyovps  于 2023-06-04  发布在  其他
关注(0)|答案(3)|浏览(141)

试图将字典项与另一列中的字符串值匹配。样本数据:

df =     A    B
     0  'a'  {'a': '2', 'b': '5'}
     1  'c'  {'a': '2', 'b': '16', 'c': '32'}
     2  'a'  {'a': '6', 'd': '23'} 
     3  'd'  {'b': '4', 'd': '76'}

我想把下面的话说出来:

Df =     A    B
     0   'a'  {'a': '2'}
     1   'c'  {'c': '32'}
     2   'a'  {'a': '6'}
     3   'd'  {'d': '76'}

我不是在一个数据框里得到的:

d = {k: v for k, v in my_dict.items() if k == 'a'}

一行,但我不能让这个工作,公平地说,我不希望它直接工作,但希望我是接近:

Test_df['B'] = {k: v for k, v in test_df['B'].items() if k == test_df['A']}

我得到以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我需要做些什么才能让它工作,或者有更好更有效的方法吗?

bfhwhh0e

bfhwhh0e1#

你可以在zip中使用列表解析:

df['B'] = [{x: d[x]} for x, d in zip(df['A'], df['B'])]

输出:

A            B
0  a   {'a': '2'}
1  c  {'c': '32'}
2  a   {'a': '6'}
3  d  {'d': '76'}
chy5wohz

chy5wohz2#

您可以使用以下命令在pandas中简单有效地完成此操作:

df['B'] = df.apply(lambda x: {x[0]: x[1][x[0]]}, axis=1)

输出:

A   B
0   a   {'a': '2'}
1   c   {'c': '32'}
2   a   {'a': '6'}
3   d   {'d': '76'}

请注意,如果键不存在,则不会进行错误检查

swvgeqrz

swvgeqrz3#

class MyDict():
    def __init__(self, d: dict) -> None:
        self.dict = d

    def __sub__(self, other):
        return {x: self.dict[x] for x in other}
    
df.B.map(MyDict) - df.A

相关问题