Python - 如何从包含字典的字典的列中计算每个唯一键的频率?

Python - How to count the frequency of each unique key from a column containing a dictionary of dictionaries?

我有一个非常大的数据框,其中包含一个名为 'time_words' 的列。该列的每个单元格都包含一个字典列表,例如:

time_columns
{'Yesterday': {'text': 'Yesterday', 'type': 'DATE', 'value': '2022-04-15'}}
{'Yesterday': {'text': 'Yesterday', 'type': 'DATE', 'value': '2022-04-16'}, 'Thursday': {'text': 'Thursday', 'type': 'DATE', 'value': '2022-04-14'}}

我怎样才能有效地得到一个 table 包含主词典唯一键的频率计数,如下所示? (在 table 中,因为我想将结果保存到 CSV。)

text count
Yesterday 2
Thursday 1

尝试:

df = (
    df["time_columns"]
    .explode()
    .value_counts()
    .reset_index(name="count")
    .rename(columns={"index": "text"})
)
print(df)

打印:

        text  count
0  Yesterday      2
1   Thursday      1

给定输入数据,你能试试这个吗?

tmp=pd.concat(([pd.DataFrame.from_dict(v,orient='index') for k,v in df['time_columns'].items()]))
tmp['text'].value_counts()

简单的方法是遍历列表并将结果保存到新字典中,例如:

res = {}
for dict in df['time_columns']:
    for key in dict.keys():
        if key not in res.keys():
             res[key] = 1
        else:
             res[key] += 1

如果你事先知道键,你可以用键和零初始化字典,并用增量替换循环内的 if 语句。

keys = ['Yesterday', 'Thursday', 'etc.']
res = {key: 0 for key in keys}
for dict in df['time_columns']:
    for key in dict.keys():
        res[key] += 1