【问题标题】:Collect cells in pandas df that are listed in another pandas df (with same index)收集在另一个 pandas df 中列出的 pandas df 中的单元格(具有相同的索引)
【发布时间】:2018-09-02 19:35:04
【问题描述】:

考虑以下示例(感兴趣的两个元素是final_dfpivot_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.nanbingo_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].valuepivot_dfnumpy.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:添加了前两行的示例。斯科特波士顿:已修复,谢谢。

标签: python pandas


【解决方案1】:

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

【讨论】:

  • @user189035 yw :-) 快乐编码
  • 我遇到了一个我无法解决的问题。基本上,当我从示例中删除 .notnull() 时(见编辑),我得到:KeyError: 'One or more column labels was not found' 我想知道这是否可以解决?
  • @user189035 当错误返回 nan 时,您可以在此处添加 if 条件
  • 好的,刚刚想通了!再次感谢。也许我会回滚我的编辑以避免混淆
猜你喜欢
  • 1970-01-01
  • 2018-04-04
  • 2020-12-13
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 2020-09-16
  • 2014-02-19
  • 2021-03-01
相关资源
最近更新 更多