微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – Pandas Dataframe:将带有列表的行展开到多行,并为所有列创建所需的索引

我在pandas数据帧中有时间序列数据,索引作为测量开始时的时间,列以固定采样率记录的值列表(连续索引的差异/列表中元素的数量)

这是它的样子:

Time         A                   B                   .......  Z
0    [1, 2, 3, 4]      [1, 2, 3, 4]
2    [5, 6, 7, 8]      [5, 6, 7, 8]
4    [9, 10, 11, 12]   [9, 10, 11, 12]
6    [13, 14, 15, 16]  [13, 14, 15, 16 ] 
...

我想将所有列中的每一行扩展为多行,以便:

Time       A           B  .... Z
0          1           1
0.5        2           2
1          3           3
1.5        4           4
2          5           5 
2.5        6           6
.......

到目前为止,我正在考虑这些方面(代码不会炒):

def expand_row(dstruc):
    for i in range (len(dstruc)):
        for j in range (1,len(dstruc[i])):
            dstruc.loc[i+j/len(dstruc[i])] = dstruc[i][j]

    dstruc.loc[i] = dstruc[i][0]
    return dstruc

expanded = testdf.apply(expand_row)

我也尝试过使用split(‘,’)和stack(),但我无法正确修复索引.

解决方法:

可能不理想,但这可以使用groupby完成并应用一个函数,该函数返回每行的扩展DataFrame(这里假设时间差固定为2.0):

def expand(x):
    data = {c: x[c].iloc[0] for c in x if c != 'Time'}
    n = len(data['A'])
    step = 2.0 / n;
    data['Time'] = [x['Time'].iloc[0] + i*step for i in range(n)]
    return pd.DataFrame(data)

print df.groupby('Time').apply(expand).set_index('Time', drop=True)

输出

       A   B
Time        
0.0    1   1
0.5    2   2
1.0    3   3
1.5    4   4
2.0    5   5
2.5    6   6
3.0    7   7
3.5    8   8
4.0    9   9
4.5   10  10
5.0   11  11
5.5   12  12
6.0   13  13
6.5   14  14
7.0   15  15
7.5   16  16

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐