【发布时间】:2015-07-08 15:08:53
【问题描述】:
我正在尝试进行我无法解决的数据框转换。我从 stackoverflow 和 pandas 文档中尝试了多种方法:apply、apply(lambda: ...)、pivots 和 joins。在这里列出的尝试太多,但不确定哪种方法最好,或者我是否尝试了错误语法的正确方法。
基本上,我有一个数据框,我需要 1) 偏移列,2) 偏移的列数变化并取决于数据框中的变量,3) 在数据框的末尾创建列需要适应偏移量,以及 4) 在新创建的间隔中放置零。
df1 = pd.DataFrame({'first' : ['John', 'Mary', 'Larry', 'jerry'], '1' : [5.5, 6.0,10,20], '2' : [100, 200, 300, 400], '3' : [150, 100, 240, 110], 'offset' : ([1,0,2,1])})
goal_df = pd.DataFrame({'first' : ['John', 'Mary', 'Larry', 'jerry'], '1' : [0.0, 6.0, 0.0, 0], '2' : [5.5, 200, 0.0, 20], '3' : [100, 100, 10, 400], '4' : [150, 0.0, 300, 110], '5' : [0.0, 0.0, 240, 0.0]})
df1
1 2 3 first offset
5.5 100 150 John 1
6.0 200 100 Mary 0
10.0 300 240 Larry 2
20.0 400 110 jerry 1
goal_df
1 2 3 4 5 first
0 5.5 100 150 0 John
6 200.0 100 0 0 Mary
0 0.0 10 300 240 Larry
0 20.0 400 110 0 jerry
这个数据集将有 c。 500 行和 c。 120 列。偏移量将非常介于 0-12 之间。我曾考虑使用基本的 Python 函数来执行此操作,但我也发现程序的困难和时间消耗会破坏最终目的,即删除在 Microsoft Excel 中完成的一些任务。
我经常抱怨 Excel 在这样的大型任务中表现不佳,但到目前为止,似乎 excel 中的当前电子表格 offset() 函数确实以一种非常易于使用的方式做到了这一点,但有数千个公式,是非常慢。我已经向我的工作场所出售了 Python 优于 Excel 的好处,这是我第一次真正的试验,所以速度对我来说非常重要,因为我试图让我的同事相信 Python 可以比当前的 excel 更快地吞噬这个电子表格文件大小为 96Mb。
我非常接近使用 melt() 函数,然后获取前列号并将偏移量添加到它们。但是,我在尝试使用枢轴改革数据框时遇到了很多问题。 apply 或 apply(lambda) 运气不好!
感谢任何人的帮助!
【问题讨论】:
标签: python pandas dataframe offset