如何根据其他列的内容选择数据框中的特定数据?

JSDRayne

我是 Pandas 的新手,我目前正尝试在平板电脑上使用 qPython 的数据集上使用它(临时情况,笔记本电脑正在修复)。我有一个 csv 文件,其中包含一组按国家、地区、市场和项目标签组织的数据,还有额外的列价格、年份和月份。这些规定如下:

Country | Region |   Market   | Item Label | ... | Price | Year | Month |
Canada  | Quebec | Market No. | Item Name  | ... |  $$$  | 2002 |   1   |
Canada  | Quebec | Market No. | Item Name  | ... |  $$$  | 2002 |   2   |
Canada  | Quebec | Market No. | Item Name  | ... |  $$$  | 2002 |   3   |
Canada  | Quebec | Market No. | Item Name  | ... |  $$$  | 2002 |   4   |

等等。我正在寻找一种根据时间绘制这些价格的方法(我已将月份/12 添加到年份以有效合并最后一列)。

最初我有一个代码来获取 csv 数据并将其放入字典中,如下所示:

{Country_Name: {Region_Name: {Market_Name: {Item_Name: {"Price": price_list, "Time": time_list}}}}}

并用于对键进行循环以访问每个价格和时间列表。

但是,我很难使用熊猫来获得类似的结果:我尝试了一些不同的方法,例如 iloc、data[data.Country == "Canada"][data.Region == "Quebec"] [...等过滤每个国家,地区,市场和项目的数据,但所有这些都特别慢。数据集相当大(大约 12000 x 12),所以我不希望立即得到结果,但是有什么明显的我遗漏了吗?还是我应该等到我的笔记本电脑回来?

编辑:为了尝试提供更多背景信息,我正在尝试获取数年和数月的价格,以绘制价格如何波动。我想根据国家、地区、市场和商品标签将它们分开,因此绘制的每条线将是一个国家某个地区市场中的不同商品。到目前为止,我有以下代码:

def abs_join_paths(*args):
    return os.path.abspath(os.path.join(*args))

def get_csv_data_frame(*path, memory = True):
    return pandas.read_csv(abs_join_paths(*path[:-1], path[-1] + ".csv"), low_memory = memory)

def get_food_data(*path):
    food_price_data = get_csv_data_frame(*path, memory = False)
    return food_price_data[food_price_data.cm_name != "Fuel (diesel) - Retail"]

food_data = get_food_data(data_path, food_price_file_name)

def plot_food_price_time_data(data, title, ylabel, xlabel, plot_style = 'k-'):
    plt.clf()
    plt.hold(True)
    data["mp_year"] += data["mp_month"]/12
    for country in data["adm0_name"].unique():
        for region in data[data.adm0_name == country]["adm1_name"].unique():
            for market in data[data.adm0_name == country][data.adm1_name == region]["mkt_name"]:
                for item_label in data[data.adm0_name == country][data.adm1_name == region][data.mkt_name == market]["cm_name"]:
                    current_data = data[data.adm0_name == country][data.adm1_name == region][data.mkt_name == market][data.cm_name == item_label]
                    #year = list(current_data["mp_year"])
                    #month = list(current_data["mp_month"])
                    #time = [float(y) + float(m)/12 for y, m in zip(year, month)]
                    plt.plot(list(current_data["mp_year"]), list(current_data["mp_price"]), plot_style)
                    print(list(current_data["mp_price"]))
    plt.savefig(abs_join_paths(imagepath, title + ".png"))

Edit2/tl;dr:我有一堆价格和时间,在一个长长的清单中一个接一个。如何使用 Pandas 根据其他列的内容将它们拆分?

干杯!

边缘

我不敢猜测,但似乎您可能正在遍历行(您说您正在使用iloc)。这是 Pandas 中最慢的操作。Pandas 数据帧针对系列访问进行了优化。

如果您绘图,您可以直接将 matplotlib 与 Pandas 数据框一起使用,并使用该groupby方法组合数据,而无需遍历数据框的行。

没有更多信息,很难具体回答您的问题。请看一下对您的问题的评论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何选择数据框中的特定数据并删除所有其他数据?

如何反转熊猫中特定数据框列的内容?

如何根据条件(特定列的相同值)从其他数据框中复制值?

如何在数据框列表中使用purrr :: map来修改特定数据框中的列值,而不更改列表中的其他数据框?

根据其他列中的答案选择在数据框中创建新列

根据其他数据框中的数据添加列

如何根据其他索引从其他数据框的列中获取值?

如何根据列组的多(其他列)条件选择数据框行?

根据其他数据框添加特定的列值

如何根据其他表中的其他关系从 1 列中选择 2 个数据

根据其他列值选择熊猫数据框中的列

根据其他列替换数据框中的列值

根据其他列数据框中的值添加列

根据其他表中的数据选择特定的行

根据其他数据框从数据框中选择值

按列分组并从熊猫数据框中的其他列中选择特定值

分组并根据熊猫数据框中的其他列比较/过滤特定组

根据其他数据框中的索引列表从其他数据框中向数据框中添加新列

如何根据python中其他列的多个条件更新数据框中的现有列?

如何根据其他两列中的值在熊猫数据框中添加新列

如何根据其他数据框更新列的值

根据条件从其他数据框中添加列

根据匹配值从其他数据框中复制列

根据其他列中的特定条件选择数据行

如何选择数据框中的特定列?

根据其他列中的几种条件选择数据行

如何根据数据框中其他列的值填充列?

如何根据数据框中的其他列值更改列值?

如何根据其他列(Python)将值放入数据框的列中?