pandas DataFrame 以列为键的字典列表
pandas DataFrame to list of dict using columns as key
我有以下数据框:
ID Col1 Col2
1 "A" "Z"
1 "A" "Y"
1 "B" "Z"
2 "A" "X"
2 "C" "P"
我想将上面的 dict 形式的列表转换为下面的 ID 列计数:
[{"A" : 2, "B" : 1, "Z" : 2, "Y" : 1}, {"A" : 1, "C" : 1, "X" : 1, "P" : 1}]
有没有我可以实现的。我拥有的数据框很大。
假设您的数据框名为 df
。您可以使用 df.groupby('ID').groups
:
获取每个 ID 的行号
group_rows = df.groupby('ID').groups
我们将遍历每个组 ID,然后使用 Counter
来计算 Col1
和 Col2
中的值。然后我会将这些添加到字典中。
from collections import Counter
my_dict = {}
for group_id, rows in group_rows.iteritems():
c = Counter(df.iloc[rows, 1]) # 1 = index number for `Col1`
c.update(df.iloc[rows, 2]) # 2 = index number for `Col2`
my_dict[group_id] = dict(c)
>>> my_dict
{1: {'A': 2, 'B': 1, 'Y': 1, 'Z': 2},
2: {'A': 1, 'C': 1, 'P': 1, 'X': 1}}
我选择将结果输出到字典而不是您请求的列表,以便组 ID
和计数值之间的关系是明确的。如果这是一个问题,我可以通过假设数据框首先按 ID
列排序来将它们转换为列表。
keys = my_dict.keys()
keys.sort()
my_list = [my_dict[k] for k in keys]
>>> my_list
[{'A': 2, 'B': 1, 'Y': 1, 'Z': 2}, {'A': 1, 'C': 1, 'P': 1, 'X': 1}]
我有以下数据框:
ID Col1 Col2
1 "A" "Z"
1 "A" "Y"
1 "B" "Z"
2 "A" "X"
2 "C" "P"
我想将上面的 dict 形式的列表转换为下面的 ID 列计数:
[{"A" : 2, "B" : 1, "Z" : 2, "Y" : 1}, {"A" : 1, "C" : 1, "X" : 1, "P" : 1}]
有没有我可以实现的。我拥有的数据框很大。
假设您的数据框名为 df
。您可以使用 df.groupby('ID').groups
:
group_rows = df.groupby('ID').groups
我们将遍历每个组 ID,然后使用 Counter
来计算 Col1
和 Col2
中的值。然后我会将这些添加到字典中。
from collections import Counter
my_dict = {}
for group_id, rows in group_rows.iteritems():
c = Counter(df.iloc[rows, 1]) # 1 = index number for `Col1`
c.update(df.iloc[rows, 2]) # 2 = index number for `Col2`
my_dict[group_id] = dict(c)
>>> my_dict
{1: {'A': 2, 'B': 1, 'Y': 1, 'Z': 2},
2: {'A': 1, 'C': 1, 'P': 1, 'X': 1}}
我选择将结果输出到字典而不是您请求的列表,以便组 ID
和计数值之间的关系是明确的。如果这是一个问题,我可以通过假设数据框首先按 ID
列排序来将它们转换为列表。
keys = my_dict.keys()
keys.sort()
my_list = [my_dict[k] for k in keys]
>>> my_list
[{'A': 2, 'B': 1, 'Y': 1, 'Z': 2}, {'A': 1, 'C': 1, 'P': 1, 'X': 1}]