将地图列合并到熊猫数据框中的单个列

时间:2020-09-10 12:41:32

标签: python pandas dataframe pandas-groupby

我正在尝试将具有字典的行合并到熊猫数据框中的单行中。输出中应该具有所有键的该列的最新键值

这是输入数据框

df = pd.DataFrame([[{'a': 1, 'c': 2}, {'a': 3, 'b': 4}], [{'a': 5, 'b': 6}, {'a': 7, 'b': 8}]], columns=list('AB'))
           A                     B
0   {'a': 1, 'c': 2}    {'a': 3, 'b': 4}
1   {'a': 5, 'b': 6}    {'a': 7, 'b': 8}

预期

           A                     B
0   {'a': 5, 'b': 6, 'c': 2}    {'a': 7, 'b': 8}

谢谢

2 个答案:

答案 0 :(得分:2)

您可以在reduce理解范围内尝试dict

from functools import reduce

d = {c: reduce(lambda x, y:  {**x, **y}, df[c]) for c in df}
d = pd.DataFrame([d.values()], columns=d.keys())

print(d)
                          A                 B
0  {'a': 5, 'c': 2, 'b': 6}  {'a': 7, 'b': 8}

答案 1 :(得分:2)

这将为您提供预期的df:

def consolidate_dicts(input_df):
    # Create consolidated dicts
    dicts = []
    for col in input_df.columns:
        dicts.append({k: v for d in input_df[col] for k, v in d.items()})

    # Replicate original DataFrame with 1 row
    return_df= pd.DataFrame([dicts], columns=input_df.columns)
    return return_df

编辑:Shubham Sharma的答案比我的要容易