【问题标题】:How to create a new column with values available in lists based on values in a diff column?如何根据差异列中的值创建具有列表中可用值的新列?
【发布时间】:2022-01-27 01:22:33
【问题描述】:

我有一个 df & 列表如下:

inital_data = {'day': ['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Wed', 'Thur', 'Thur', 'Fri', 'Fri', 'Sat', 'Sat', 'Sun', 'Sun']}
inital_df = pd.DataFrame(inital_data)

Mon = [1, 2]
Tue = [3, 4]
Wed = [5, 6]
Thur = [7, 8]
Fri = [9, 10]
Sat = [11, 12]
Sun = [13, 14]

我想创建一个新列并根据initial_dfday 列中的值为其分配列表中的值

生成的df应该如下:

final_data = {
    'day': ['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Wed', 'Thur', 'Thur', 'Fri', 'Fri', 'Sat', 'Sat', 'Sun', 'Sun'],
    'values': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    }
final_df = pd.DataFrame(final_data)

我尝试使用np.select,但在这种情况下似乎不起作用。

我怎样才能实现这样的目标?

提前致谢

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    enumerate为元组d1创建字典,然后映射GroupBy.cumcount创建的MultiIndex

    d = {'Mon':Mon, 'Tue':Tue, 'Wed':Wed,'Thur':Thur,'Fri':Fri,'Sat':Sat, 'Sun':Sun}
    
    d1 = {(k, i):x for k, v in d.items() for i, x in enumerate(v)}
    print (d1)
    {('Mon', 0): 1, ('Mon', 1): 2, ('Tue', 0): 3, ('Tue', 1): 4, ('Wed', 0): 5,
     ('Wed', 1): 6, ('Thur', 0): 7, ('Thur', 1): 8, ('Fri', 0): 9, 
     ('Fri', 1): 10, ('Sat', 0): 11, ('Sat', 1): 12, ('Sun', 0): 13, ('Sun', 1): 14}
    
    mux = inital_df.set_index(['day', inital_df.groupby('day').cumcount()]).index
    
    inital_df['values'] = mux.map(d1)
    print (inital_df)
         day  values
    0    Mon       1
    1    Mon       2
    2    Tue       3
    3    Tue       4
    4    Wed       5
    5    Wed       6
    6   Thur       7
    7   Thur       8
    8    Fri       9
    9    Fri      10
    10   Sat      11
    11   Sat      12
    12   Sun      13
    13   Sun      14
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2020-08-13
      • 1970-01-01
      相关资源
      最近更新 更多