【问题标题】:Pandas: get column, based on another column which contains column names [duplicate]Pandas:获取列,基于包含列名的另一列[重复]
【发布时间】:2021-06-10 01:02:41
【问题描述】:

我正在编写一个脚本来做一些定价。有一个包含数量列表的数据框:

Name Volume Area
Wood 133 256
Steel 55 330

(还有 1800 多行类似的行)

我需要做的是在 df 中创建第三列,其中包含“真实”数量。 几乎,在某些材料上是体积,在其他材料上是面积。

Name Volume Area Qty
Wood 133 256 133
Steel 55 330 330

到目前为止,我一直在考虑创建一个字典:

my_dict = {'Wood':'Volume', 'Steel':'Area'}

使用地图(或替换)我将其放入 df 的列中:

Name Volume Area Datafield
Wood 133 256 Volume
Steel 55 330 Area

现在,根据 Datafield 的说明,我将如何将数量放入 Quantity 列?

我试过了

df['数量'] = df[df['Datafield']]

但是,它崩溃了,我被卡住了。

【问题讨论】:

  • 请提供制作 DF 的代码。对于minimal reproducible example 目的而言,表格几乎与图像一样无用
  • @MadPhysicist 你可以pd.read_clipboard,不是吗?虽然我听说 Colab 有一些问题。
  • numpy: df['Qty'] = df.to_numpy()[df.index,df.columns.get_indexer(df['Datafield'])]

标签: python pandas


【解决方案1】:

试一试:

df['QTY'] = df.lookup(df.index, df['Datafield'])

替代方案:

df['QTY'] = df.apply(lambda x: x[x['Datafield']],1)

通过融化的另一种选择:

k = df.melt('Datafield')
df['QTY'] = k[k.Datafield.eq(k.variable)]['value'].values
输出:
   Name  Volume  Area Datafield  QTY
0   Wood     133   256    Volume  133
1  Steel      55   330      Area  330

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2022-07-07
    相关资源
    最近更新 更多