如何用 Pandas 总结某些行并将结果添加到 defaultdict(大型数据集)
How to sum up certain rows with Pandas and add the result to a defaultdict (large dataset)
我有一个包含 500 万个名称条目的数据框。结构如下:
dataframe
从这个数据框中可以看出,例如,1910 年阿拉斯加 (AK) 的 14 个婴儿被取名为 Mary。但是名字 玛丽在其他州和随后的几年中也被送给新生儿。
我想确定的是:整个特定数据集中最常使用的名称是什么,该名称分配的频率是多少?
我试过这个:
import pandas as pd
from collections import defaultdict
df = pd.read_csv("names.csv")
mask = df[["Name", "Count"]]
counter = 0
dd = defaultdict(int)
for pos, data in mask.iterrows():
name = data["Name"]
dd[name] = dd[name] + data["Count"]
counter += 1
if counter == 100000:
break
print ("Done!")
freq_name = 0
name = ""
for key, value in dd.items():
if freq_name < value:
freq_name = value
name = key
print(name)
此代码运行良好,但最多只能处理 100.000 行。但是,当我将提供的代码与完整数据集一起使用时,它需要很长时间。
任何想法或提示我可以改进的地方都将不胜感激。
根据评论中的建议,您可以使用如下内容:
df = pd.read_csv("names.csv")
name, total_count = max(df.groupby('Name').Count.sum().items(), key=lambda x: x[1])
我有一个包含 500 万个名称条目的数据框。结构如下:
dataframe
从这个数据框中可以看出,例如,1910 年阿拉斯加 (AK) 的 14 个婴儿被取名为 Mary。但是名字 玛丽在其他州和随后的几年中也被送给新生儿。
我想确定的是:整个特定数据集中最常使用的名称是什么,该名称分配的频率是多少?
我试过这个:
import pandas as pd
from collections import defaultdict
df = pd.read_csv("names.csv")
mask = df[["Name", "Count"]]
counter = 0
dd = defaultdict(int)
for pos, data in mask.iterrows():
name = data["Name"]
dd[name] = dd[name] + data["Count"]
counter += 1
if counter == 100000:
break
print ("Done!")
freq_name = 0
name = ""
for key, value in dd.items():
if freq_name < value:
freq_name = value
name = key
print(name)
此代码运行良好,但最多只能处理 100.000 行。但是,当我将提供的代码与完整数据集一起使用时,它需要很长时间。
任何想法或提示我可以改进的地方都将不胜感激。
根据评论中的建议,您可以使用如下内容:
df = pd.read_csv("names.csv")
name, total_count = max(df.groupby('Name').Count.sum().items(), key=lambda x: x[1])