我有一个熊猫数据框。我想按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执行操作。有什么办法可以解决这个问题吗?最后,第二个字典应具有以下值
答案 0 :(得分:0)
使用GroupBy.size
,将Series.reset_index
与drop=True
和Series.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]}