python – Pandas Dataframe:将带有列表的行展开到多行,并为所有列创建所需的索引
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Pandas Dataframe:将带有列表的行展开到多行,并为所有列创建所需的索引,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1486字,纯文字阅读大概需要3分钟。
内容图文
![python – Pandas Dataframe:将带有列表的行展开到多行,并为所有列创建所需的索引](/upload/InfoBanner/zyjiaocheng/788/85d004d0664743678c639352b9c7f4b0.jpg)
我在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
内容总结
以上是互联网集市为您收集整理的python – Pandas Dataframe:将带有列表的行展开到多行,并为所有列创建所需的索引全部内容,希望文章能够帮你解决python – Pandas Dataframe:将带有列表的行展开到多行,并为所有列创建所需的索引所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。