【问题标题】:Select columns in a DataFrame conditional on row以行为条件选择 DataFrame 中的列
【发布时间】:2020-01-24 22:25:01
【问题描述】:

我正在尝试基于另一个数据帧生成一个数据帧(或系列),根据使用另一个系列的行从第一帧中选择不同的列。在下面的简化示例中,我想要前三行的“a”中的 frame1 值,最后两行的“b”(picked_values 系列)。

frame1=pd.DataFrame(np.random.randn(10).reshape(5,2),index=range(5),columns=['a','b'])
picked_values=pd.Series(['a','a','a','b','b'])

第一帧

    a           b
0   0.283519    1.462209
1   -0.352342   1.254098
2   0.731701    0.236017
3   0.022217    -1.469342
4   0.386000    -0.706614

试图进入系列:

0   0.283519
1   -0.352342
2   0.731701
3   -1.469342
4   -0.706614

我希望values[picked_values] 可以工作,但这最终有五列。

在实际示例中,picked_values 大得多并且经过计算。

感谢您的宝贵时间。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用df.lookup

    pd.Series(frame1.lookup(picked_values.index,picked_values))
    

    0    0.283519
    1   -0.352342
    2    0.731701
    3   -1.469342
    4   -0.706614
    dtype: float64
    

    【讨论】:

    • 这就是为什么堆栈溢出是最好的。谢谢!
    【解决方案2】:

    这是一个基于NumPy 的方法,使用integer indexingSeries.searchsorted

    frame1.values[frame1.index, frame1.columns.searchsorted(picked_values.values)]
    # array([0.22095278, 0.86200616, 1.88047197, 0.49816937, 0.10962954])
    

    【讨论】:

    • 我想知道为什么会有不同的输出,然后意识到样本是随机的。
    • 是的 :) 可以坚持生成的,以减少混淆@anky
    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2017-09-23
    • 2016-10-06
    • 2022-11-22
    • 2015-03-22
    • 2018-11-16
    相关资源
    最近更新 更多