【问题标题】:Adding a time column to a DataFrame based on another DataFrame基于另一个 DataFrame 向 DataFrame 添加时间列
【发布时间】:2020-05-07 20:14:15
【问题描述】:

我有DataFrame DataA,它的行代表一个项目的值

DataA
row  item_id  value
0    x        V1
1    y        V2
2    z        V3
3    y        V4
4    z        V5
5    x        V6
6    y        V7
7    z        V8
8    z        V9

此外,还有另一个名为 DataA_mapper 的 DataFrame,它将时间值映射到 DataA 中的一系列行

DataA_mapper
time  start_row  num_rows
0     0          3
1     3          2
3     5          2
5     8          1

对于 DataA_mapper 中的给定行,DataA 中 [start_row, start_row + num_row) 范围内的行都将被赋予 DataA_mapper.time。

python中的DF定义:

dataA = [
    [x, 'V1'], [y, 'V2'], [z, 'V3'], [y, 'V4'],
    [z, 'V5'], [x, 'V6'], [y, 'V7'], [z, 'V8'], [z, 'V9']]


DataA_mapper = [[0, 0, 3], [1, 3, 2], [3, 5, 2], [5, 8, 1]]


dataA_df = pd.DataFrame(dataA, columns = ['item_id', 'value'])
DataA_mapper_df = pd.DataFrame(DataA_mapper, columns = ['time', 'start_row', 'num_rows'])

我想生成以下 DataFrame,但我不知道从哪里开始:

time  item_id   value
0     x         V1
0     y         V2
0     z         V3
1     y         V4
1     z         V5
3     x         V6
3     y         V7
5     z         V9

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我认为你需要Series.repeat

    dataA_df.index = DataA_mapper_df.time.repeat(DataA_mapper_df.num_rows)
    dataA_df = dataA_df.reset_index()
    print(dataA_df)
    

    输出

       time item_id value
    0     0       x    V1
    1     0       y    V2
    2     0       z    V3
    3     1       y    V4
    4     1       z    V5
    5     3       x    V6
    6     3       y    V7
    7     3       z    V8
    8     5       z    V9
    

    【讨论】:

    • 这是一个很好的答案!虽然我做了 1 次小改动,但如果 DataA 中有一行(例如:第 7 行)未被 DataA_mapper_df 中定义的任何范围所涵盖,那么它不应该出现在最终的 DF 中 - 你会碰巧知道那是怎么回事吗?可以吗?
    猜你喜欢
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2015-12-06
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多