python - 收集在另一个 pandas df 中列出的 pandas df 中的单元格(具有相同的索引)
问题描述
考虑以下示例(感兴趣的两个元素是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
应包含:
- 每当 的 条目
(row = i, col = j)
是final_df
时,的numpy.nan
条目应该是(i,j)
bingo_df
numpy.nan
。 - 否则,[只要 的条目
(i, j)
不是 ] 的条目 应该是单元格处的值final_df
(实际上是或 的列的名称)numpy.nan
(i,j)
bingo_df
[i, final_df[i, j].value]
pivot_df
final_df[i, j].value
pivot_df
numpy.nan
预期输出:
所以第一行final_df
是
0.55, nan, nan
.
所以我希望第一行bingo_df
是:
0.0, nan, nan
因为单元格(row = 0, col = 0.55)
中的值pivot_df
是(并且第一行中0
随后的两个也应该在numpy.nan
final_df
numpy.nan
bingo_df
)
所以第二行final_df
是
0.55, 0.72, nan
所以我期待第二行bingo_df
是:
0.0, 1.0, nan
因为单元格(row = 1, col = 0.55)
中的值pivot_df
is0.0
和单元格中的(row = 1, col = 0.72)
值pivot_df
is1.0
解决方案
IIUClookup
s=final_df.stack()
pd.Series(pivot_df.lookup(s.index.get_level_values(0),s),index=s.index).unstack()
Out[87]:
0 1 2
0 0.0 NaN NaN
1 0.0 1.0 NaN
2 0.0 1.0 2.0
3 0.0 0.0 2.0
4 0.0 0.0 0.0
5 0.0 0.0 0.0
6 0.0 1.0 0.0
7 0.0 2.0 0.0
8 0.0 3.0 0.0
9 0.0 0.0 4.0
推荐阅读
- reactjs - 反应管理员。如何在单独的页面上显示用户活动
- node.js - 如何在进程退出之前强制nodejs winston日志文件
- python - 使用嵌套循环在 Python 中进行并行处理
- sails.js - Cannot read property 'omitFormat' of undefined
- typescript - 断言后类型推导不正确?
- c# - 如何通过 1 次屏幕触摸将 Froce 添加到 2D 刚体?
- java - 如何在 Selenium Webdriver 中屏蔽广告
- ios - 我们如何在 UITabBar 中为特定 UITabBarItem 的图像设置不同的高度?
- docker - 在构建步骤中使用参数的 Docker GitHub 操作
- xml - 需要在 xslt 1.0 上执行双重嵌套排序