在对这些值进行操作之后,将其从一个字典添加到另一个字典中

时间:2019-05-18 14:50:09

标签: python python-3.x pandas dataframe dictionary

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

我的代码:

Storage(std::initializer_list<T> const& list)
    : nrOfEl( static_cast<int>(list.size()) )
{ ... }

我尝试了以下方法:

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))

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

1 个答案:

答案 0 :(得分:0)

使用GroupBy.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]}