通过外部列表中熊猫的索引和列填充单元格值

时间:2019-06-13 20:04:30

标签: python pandas lambda

我试图通过在列表列表中查找值并尝试查找列/索引匹配来填充数据框。我找到了这篇文章,并认为我可以根据需要对其进行修改。 fill in entire dataframe cell by cell based on index AND column names?。他使用edit_distance函数填写了熊猫数据框。我目前正在尝试修改该功能,以便它输出实际数据。

我的数据集看起来像这样,但具有更多的值:

Data = [Product Number, Date, Quantity]
       [X1          , 2018-01, 2]
       [X1,         , 2018-02, 4]
       [X1,         , 2018-03, 7]
       [X2,         , 2018-01, 3]
       [X3,         , 2018-02, 5]
       [X3,         , 2018-03, 6]

预期结果:粗略表示歉意

DF = 2018-01 2018-02- 2018-03
  X1  2         4        7
  X2  3             
  X3            5        6

我将列表中的所有产品编号和日期都删除了重复数据,并将它们设置为与以下相同,就像他在引用的堆栈问题中所做的一样。

series_rows = pd.Series(prod_deduped)
series_cols = pd.Series(dates_deduped)

他用于映射所有单元格的代码:

df = pd.DataFrame(series_rows.apply(lambda x: series_cols.apply(lambda y: edit_distance(x, y))))

以edit_distance开头的部分是根据x,y的输入返回值的函数。我创建了自己的函数,该函数将遍历列表列表并根据匹配结果返回一个值。

def return_value(s1, s2, list_of_lists, starting_point_in_case_of_header):
    for row in list_of_lists[starting_point_in_case_of_header:]:
        result = ''
        product = row[0]
        date = row[1]
        quantity = row[2]
        #for prod in product:
        if product == s1 and date == s2:
            result = quantity
        return result

我在第1列,第1列上有一个匹配项,但其他所有内容均为空白,这使我认为我真的需要先遍历s1或s2。任何帮助,将不胜感激。谢谢!

编辑:这是我最近的尝试遍历s1和s2的尝试,但这只是说我的列表索引超出范围而出错。我认为我的步伐正确。

def return_value(s1, s2, list_of_lists, starting_point_in_case_of_header):
    for y in enumerate(s2):
        result_ = []
        for x in enumerate(s1):
            for row in list_of_lists[starting_point_in_case_of_header:]:
                product = row[0]
                date = row[1]
                quantity = row[2]
                if product == x and date == y:
                    result_.append(quantity)
        result = result_
    return result[-1]

我的最终代码将所有内容放在一起:

result_df = pd.DataFrame(series_rows.apply(lambda x: series_cols.apply(lambda y: return_value(x, y, sorted_deduped_list, 0))))

0 个答案:

没有答案