如何根据子列表中的元素将子列表附加到特定索引和列中的数据框?

阿兹米哈尼夫

我有一个随机生成的嵌套列表,如下所示

[[[6008, 'BSC3', 'ST1'], ['LB1'], ['MTM2']], [[5227, 'BSC2', 'ST8'], ['LB1'], ['TTM1']]]

我也有一个看起来像这样的数据框:

空时间表

我的问题是如何根据每个子列表中的元素为上面生成的每个子列表填充时间表内的特定位置?例如,在嵌套列表中,第一个子列表是:

[[6008, 'BSC3', 'ST1'], ['LB1'], ['MTM2']]

该列表的 2 元素具有代表星期一和时间段 #2(即 12:00PM - 2:00PM)的“MTM2”。

第二个子列表

[[5227, 'BSC2', 'ST8'], ['LB1'], ['TTM1']]

第二个元素是“TTM1”,代表星期二和时间段 #1(上午 9:30 - 下午 12:30)

我对上面示例的期望是数据框看起来像这样:

在此处输入图像描述

这是我的测试尝试(没有效果):

 def append_to_timetable(self, solution):

        for x in solution:

            if x[2] == 'MTM1':
                self.m.loc['Monday', 0] = x
                print(self.m)

        return self.m

编辑:增加了 13 个子列表(现在总共 15 个子列表)

[[[4220, 'BSC2', 'ST5'], ['CR1'], ['THTM2']], [[4201, 'BSC1', 'ST1'], ['LB1'], ['TTM3']], [[4222, 'BSC1', 'ST6'], ['CR1'], ['THTM2']], [[6226, 'BSC3', 'ST6'], ['LB1'], ['THTM3']], [[4220, 'BSC2', 'ST5'], ['LH1'], ['WTM1']], [[4227, 'BSC1', 'ST4'], ['LB1'], ['MTM2']], [[5225, 'BSC2', 'ST6'], ['LR1'], ['TTM3']], [[4227, 'BSC1', 'ST4'], ['LH2'], ['FTM1']], [[6224, 'BSC1', 'ST4'], ['LH1'], ['FTM3']], [[3225, 'BSC1', 'ST6'], ['LR1'], ['WTM2']], [[6224, 'BSC1', 'ST4'], ['LB1'], ['THTM1']], [[4220, 'BSC2', 'ST5'], ['LH2'], ['WTM2']], [[4210, 'BSC1', 'ST1'], ['LH2'], ['THTM2']], [[6224, 'BSC1', 'ST4'], ['LR1'], ['TTM3']], [[5227, 'BSC2', 'ST8'], ['LH1'], ['WTM1']]]

还想知道,是否可以在同一个特定插槽中插入两个或多个子列表?例如:

[[5225, 'BSC2', 'ST6'], ['LR1'], ['TTM3']]

and 

[[4201, 'BSC1', 'ST1'], ['LB1'], ['TTM3']]

同时。它看起来像这样:

在此处输入图像描述

畜栏

更新

编辑后,情况有点复杂,但想法保持不变:

cols = {'M': 'Monday', 'T': 'Tuesday', 'W': 'Wednesday',
        'TH': 'Thursday', 'F': 'Friday'}
rows = df.index.tolist()

def get_loc(code):
    m, t = code.split('TM')
    col = cols[m]
    row = rows[int(t) - 1]
    return (row, col)

# Decode each element of the list
mi = pd.MultiIndex.from_tuples(tuple(get_loc(x[2][0]) for x in l), 
                               names=['row', 'col'])

out = pd.Series([l]).explode().to_frame('data').set_index(mi).reset_index() \
        .pivot_table('data', 'row', 'col', aggfunc=list, fill_value='') \
        .reindex(index=df.index, columns=df.columns, fill_value='')

输出:

周一 星期四 周三 周四 星期五
上午 9:30 - 下午 12:30 [[[4220, 'BSC2', 'ST5'], ['LH1'], ['WTM1']], [[5227, 'BSC2', 'ST8'], ['LH1'], ['WTM1' ]]] [[[6224, 'BSC1', 'ST4'], ['LB1'], ['THTM1']]] [[[4227, 'BSC1', 'ST4'], ['LH2'], ['FTM1']]]
中午 12:00 - 下午 2:00 [[[4227, 'BSC1', 'ST4'], ['LB1'], ['MTM2']]] [[[3225, 'BSC1', 'ST6'], ['LR1'], ['WTM2']], [[4220, 'BSC2', 'ST5'], ['LH2'], ['WTM2' ]]] [[[4220, 'BSC2', 'ST5'], ['CR1'], ['THTM2']], [[4222, 'BSC1', 'ST6'], ['CR1'], ['THTM2' ]], [[4210, 'BSC1', 'ST1'], ['LH2'], ['THTM2']]]
下午 2:00 - 下午 5:00 [[[6226, 'BSC3', 'ST6'], ['LB1'], ['THTM3']]] [[[6224, 'BSC1', 'ST4'], ['LH1'], ['FTM3']]]

数据:

df = pd.DataFrame(columns=['Monday', 'Thuesday', 'Wednesday', 'Thursday', 'Friday'],
                  index=['9:30AM - 12:30PM', '12:00PM - 2:00PM', '2:00PM - 5:00PM'])

l = [[[4220, 'BSC2', 'ST5'], ['CR1'], ['THTM2']],
    [[4201, 'BSC1', 'ST1'], ['LB1'], ['TTM3']],
    [[4222, 'BSC1', 'ST6'], ['CR1'], ['THTM2']],
    [[6226, 'BSC3', 'ST6'], ['LB1'], ['THTM3']],
    [[4220, 'BSC2', 'ST5'], ['LH1'], ['WTM1']],
    [[4227, 'BSC1', 'ST4'], ['LB1'], ['MTM2']],
    [[5225, 'BSC2', 'ST6'], ['LR1'], ['TTM3']],
    [[4227, 'BSC1', 'ST4'], ['LH2'], ['FTM1']],
    [[6224, 'BSC1', 'ST4'], ['LH1'], ['FTM3']],
    [[3225, 'BSC1', 'ST6'], ['LR1'], ['WTM2']],
    [[6224, 'BSC1', 'ST4'], ['LB1'], ['THTM1']],
    [[4220, 'BSC2', 'ST5'], ['LH2'], ['WTM2']],
    [[4210, 'BSC1', 'ST1'], ['LH2'], ['THTM2']],
    [[6224, 'BSC1', 'ST4'], ['LR1'], ['TTM3']],
    [[5227, 'BSC2', 'ST8'], ['LH1'], ['WTM1']]]

旧答案

您可以使用函数来解码索引和列:

df = pd.DataFrame(columns=['Monday', 'Thuesday', 'Wednesday', 'Thursday', 'Friday'],
                  index=['9:30AM - 12:30PM', '12:00PM - 2:00PM', '2:00PM - 5:00PM'])

l = [[[6008, 'BSC3', 'ST1'], ['LB1'], ['MTM2']],
     [[5227, 'BSC2', 'ST8'], ['LB1'], ['TTM1']]]

# Check for Thursday encoding?
day_to_col = {'M': 0, 'T': 1, 'W': 2, 'TH': 3, 'F': 4}

def get_loc(code):
    m, t = code.split('TM')
    col = day_to_col[m]
    row = int(t) - 1
    return (row, col)

df.to_numpy()[tuple(get_loc(x[2][0]) for x in l)] = l

输出:

>>> df
                                              Monday                            Thuesday Wednesday Thursday Friday
9:30AM - 12:30PM                                 NaN  [[5227, BSC2, ST8], [LB1], [TTM1]]       NaN      NaN    NaN
12:00PM - 2:00PM  [[6008, BSC3, ST1], [LB1], [MTM2]]                                 NaN       NaN      NaN    NaN
2:00PM - 5:00PM                                  NaN                                 NaN       NaN      NaN    NaN

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数据附加到 arangodb 中的嵌套列表(子列表)

来自分类Dev

如何从存储在使用 tidyr 包构建的数据框中的列表中获取特定元素和子元素?

来自分类Dev

如何将元素列表附加到数据框的单个功能中?

来自分类Dev

如何将列表中的元素添加到数据框作为保留顺序的列?

来自分类Dev

如何将列表中的元素一一追加到数据框中的嵌套列表中

来自分类Dev

如何根据子列表中的条件删除列表元素

来自分类Dev

循环遍历数据框并在满足条件时将特定列中的行附加到新列表

来自分类Dev

如何在列表中附加子列表?

来自分类Dev

将列表中的所有元素插入第二个列表的子列表的特定索引中-python 2

来自分类Dev

Python附加到列表列表中的子列表

来自分类Dev

如何将数据框中的值与列表中的值匹配,然后将列表附加到 R 中?

来自分类Dev

如果此子列表中的特定元素,Python将删除列表中的子列表

来自分类Dev

如果子列表中存在术语,如何仅将子列表附加到另一个列表?

来自分类Dev

如何将子进程的每个输出附加到列表中?

来自分类Dev

是否有将列表值附加到 R 中列表的子列表的最佳方法?

来自分类Dev

将一列附加到列表中的每个数据框

来自分类Dev

将列表转换为R中的数据框,并添加带有子列表名称的列

来自分类Dev

如何将excel文件中的特定数据附加到python列表中?

来自分类Dev

如何根据另一个列表中的索引从列表中获取子列表?

来自分类Dev

根据其他列在python pandas数据框中创建子列表的最大值

来自分类Dev

将字典中的数据附加到列表

来自分类Dev

如何根据列表从熊猫数据框中过滤子字符串?

来自分类Dev

如何将子级别和大子级别json数据附加到树视图结构中

来自分类Dev

如何检查元素是否在子列表中某个索引处的列表列表中?

来自分类Dev

如果找到特定值,如何将数据帧行附加到列表中?

来自分类Dev

根据单独对象列表中的值将列添加到列表中的每个数据框

来自分类Dev

如何根据 Python 中另一个列表的(子列表)索引对列表进行分区

来自分类Dev

如何将列表列表隐藏到数据框中并使列表的第一个元素作为索引

来自分类Dev

根据列表显示数据框中的特定列

Related 相关文章

  1. 1

    将数据附加到 arangodb 中的嵌套列表(子列表)

  2. 2

    如何从存储在使用 tidyr 包构建的数据框中的列表中获取特定元素和子元素?

  3. 3

    如何将元素列表附加到数据框的单个功能中?

  4. 4

    如何将列表中的元素添加到数据框作为保留顺序的列?

  5. 5

    如何将列表中的元素一一追加到数据框中的嵌套列表中

  6. 6

    如何根据子列表中的条件删除列表元素

  7. 7

    循环遍历数据框并在满足条件时将特定列中的行附加到新列表

  8. 8

    如何在列表中附加子列表?

  9. 9

    将列表中的所有元素插入第二个列表的子列表的特定索引中-python 2

  10. 10

    Python附加到列表列表中的子列表

  11. 11

    如何将数据框中的值与列表中的值匹配,然后将列表附加到 R 中?

  12. 12

    如果此子列表中的特定元素,Python将删除列表中的子列表

  13. 13

    如果子列表中存在术语,如何仅将子列表附加到另一个列表?

  14. 14

    如何将子进程的每个输出附加到列表中?

  15. 15

    是否有将列表值附加到 R 中列表的子列表的最佳方法?

  16. 16

    将一列附加到列表中的每个数据框

  17. 17

    将列表转换为R中的数据框,并添加带有子列表名称的列

  18. 18

    如何将excel文件中的特定数据附加到python列表中?

  19. 19

    如何根据另一个列表中的索引从列表中获取子列表?

  20. 20

    根据其他列在python pandas数据框中创建子列表的最大值

  21. 21

    将字典中的数据附加到列表

  22. 22

    如何根据列表从熊猫数据框中过滤子字符串?

  23. 23

    如何将子级别和大子级别json数据附加到树视图结构中

  24. 24

    如何检查元素是否在子列表中某个索引处的列表列表中?

  25. 25

    如果找到特定值,如何将数据帧行附加到列表中?

  26. 26

    根据单独对象列表中的值将列添加到列表中的每个数据框

  27. 27

    如何根据 Python 中另一个列表的(子列表)索引对列表进行分区

  28. 28

    如何将列表列表隐藏到数据框中并使列表的第一个元素作为索引

  29. 29

    根据列表显示数据框中的特定列

热门标签

归档