首页 > 解决方案 > 在对这些值进行操作后将值从一个字典添加到另一个字典

问题描述

我有一个熊猫数据框。我想将数据框按 2 列分组,获取数据框切片的长度,然后使用键的第一部分将长度添加到另一个字典中,即“C”。

我的代码:

df = pd.DataFrame({'C': [20, 20, 20, 20, 10, 10, 10, 30, 30, 30],
                   'C2': [20, 20, 20, 20, 10, 10, 10, 30, 30, 30],
                   'D': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})

df_dictionary = df.groupby(["C", "C2"])

second_dict = dict()

for key, df_values in df_dictionary:
    print(len(df_values.index))

我尝试了以下方法:

for key[0], df_values in df_dictionary.iteritems():
    second_dict.setdefault(key, []).extend(df_values.index)

但它不允许我对 df_values 执行操作。有什么办法可以解决这个问题吗?最后,第二个字典应该有以下值

标签: pythonpython-3.xpandasdataframedictionary

解决方案


使用,通过withGroupBy.size删除第二级:Series.reset_indexdrop=TrueSeries.to_dict

d = df.groupby(["C", "C2"]).size().reset_index(level=1, drop=True).to_dict()
print (d)
{10: 3, 20: 4, 30: 3}

如果需要索引值:

d1 = (df.groupby(["C", "C2"])
        .apply(lambda x: x.index.tolist())
        .reset_index(level=1, drop=True)
        .to_dict())
print (d1)
{10: [4, 5, 6], 20: [0, 1, 2, 3], 30: [7, 8, 9]}

您的解决方案应该有效:

for key, df_values in df_dictionary:
    second_dict.setdefault(key[0], []).extend(df_values.index)

print (second_dict)
{10: [4, 5, 6], 20: [0, 1, 2, 3], 30: [7, 8, 9]}

推荐阅读