【发布时间】:2018-09-02 19:35:04
【问题描述】:
考虑以下示例(感兴趣的两个元素是final_df 和pivot_df。其余代码只是构造这两个df):
import numpy
import pandas
numpy.random.seed(0)
input_df = pandas.concat([pandas.Series(numpy.round_(numpy.random.random_sample(10,), 2)),
pandas.Series(numpy.random.randint(0, 2, 10))], axis = 1)
input_df.columns = ['key', 'val']
pivot_df = input_df.pivot(columns = 'key', values = 'val')\
.fillna(method = 'pad')\
.cumsum()
index_df = pivot_df.notnull()\
.multiply(pivot_df.columns, axis = 1)\
.replace({0.0: numpy.nan})\
.values
final_df = numpy.delete(numpy.partition(index_df, 3, axis = 1),
numpy.s_[3:index_df.shape[1]], axis = 1)
final_df.sort(axis = 1)
final_df = pandas.DataFrame(final_df)
final_df 包含与pivot_df 一样多的行。我想用这两个来构造第三个df:bingo_df。
bingo_df 的尺寸应与final_df 相同。那么bingo_df 的单元格应该包含:
- 只要
final_df的条目(row = i, col = j)是numpy.nan,bingo_df的条目(i,j)也应该是numpy.nan。 - 否则,[只要
final_df的条目(i, j)不是numpy.nan],bingo_df的条目(i,j)应该是pivot_df的单元格[i, final_df[i, j].value]的值(实际上是final_df[i, j].value是pivot_df或numpy.nan列的名称)
预期输出:
所以final_df的第一行是
0.55, nan, nan.
所以我希望bingo_df 的第一行是:
0.0, nan, nan
因为pivot_df的单元格(row = 0, col = 0.55)中的值是0
(而final_df第一行后面的两个numpy.nan也应该是bingo_df中的numpy.nan)
所以final_df的第二行是
0.55, 0.72, nan
所以我希望bingo_df 的第二行是:
0.0, 1.0, nan
因为pivot_df 的单元格(row = 1, col = 0.55) 中的值是0.0
并且pivot_df的单元格(row = 1, col = 0.72)中的值为1.0
【问题讨论】:
-
那么您的预期输出是什么?
-
@Wen:添加了前两行的示例。斯科特波士顿:已修复,谢谢。