【发布时间】:2019-08-24 21:12:46
【问题描述】:
在 for 循环中,我使用从函数返回的字典填充数据帧。也许我没有使用正确的术语进行搜索,或者我解决此问题的方法是错误的,但我无法在网上找到适用的解决方案。我认为我目前这样做的方式非常低效。
我对 Pandas 相当缺乏经验 - 我尝试了一些尝试使用合并方法,以及 concat、append 和 remove_duplicates 的一些组合,但我还没有完全管理我想要的。
我目前的解决方案是遍历字典项:
for company in Company.instances:
for resource in company.resources:
for product in resource["product"]:
my_dictionary = my_function("with varying args per company/product")
# Remove None values from my_dictionary
my_dictionary = {k: v for k, v in my_dictionary.copy().items() if v is not None}
# TODO speed this up
if len(my_dictionary) > 0:
df = Company.products[product]["current"]
for subproduct, value in my_dictionary.items():
df.loc[
(df["product"] == product) &
(df["subproduct"] == subproduct),
company.name
] = value
注意事项:
Company.products[product]["current"] 的 Company 类中的每个数据帧都使用以下格式的每个数据帧一个产品进行初始化:
product subproduct company1 company2
0 a 1
1 a 2
2 a 3
3 a 4
4 a 5
字典键是指子产品列。数据框中的每个公司列可以有两个或多个字典 - 例如:
"""
if my_function returns this dict for company1:
{'1': 'alpha', '2': 'bravo', '3': 'charlie'}
desired:
product subproduct company1 company2
0 a 1 alpha
1 a 2 bravo
2 a 3 charlie
3 a 4
4 a 5
followed by this dict also for company1:
{'1': 'november', '5': 'echo'}
desired:
product subproduct company1 company2
0 a 1 november
1 a 2 bravo
2 a 3 charlie
3 a 4
4 a 5 echo
and this dict for company2:
{'4': 'kilo', '2': 'foxtrot'}
desired:
product subproduct company1 company2
0 a 1 november
1 a 2 bravo foxtrot
2 a 3 charlie
3 a 4 kilo
4 a 5 echo
"""
感谢您花时间阅读,如果您想节省一两分钟重新创建数据帧结构和复制字典,这里有一个 pastebin:https://pastebin.com/raw/KkF77LCG
【问题讨论】:
标签: python python-3.x pandas