【问题标题】:Create a dummy column and input value based on condition根据条件创建虚拟列和输入值
【发布时间】:2023-01-17 21:10:04
【问题描述】:

我有包含主题列表(主题 1-​​6;0 表示未分配主题)及其值的数据。我想为每个主题和每个标签创建一个新列,并用值填充该列。这是桌子的样子......

reviewId   topic   value     label
      01       2      -4  negative
      02       2       9  positive
      03       0      -7  negative
      04       5      -1  negative
      05       1      38  positive

我应该怎么做才能创建一个看起来像这样的表?

reviewId topic value label t1p t1n t2p t2n t3p t3n t4p t4n t5p t5n
01 2 -4 negative 0 0 0 -4 0 0 0 0 0 0
02 2 9 positive 0 0 9 0 0 0 0 0 0 0
03 0 -7 negative 0 0 0 0 0 0 0 0 0 0
04 5 -1 negative 0 0 0 0 0 0 0 0 0 -1
05 1 38 positive 38 0 0 0 0 0 0 0 0 0

这是要处理的可重现数据。

raw_df = pd.DataFrame({
    'reviewId': ['01', '02', '03', '04', '05'],
    'topic': [2, 2, 0, 5, 1],
    'value': ['-4', '9', '-7', '-1', '38']})

这是关于此问题的类似主题的链接..

  • 关于输入值的问题:link
  • 基于标签创建列的问题:link

【问题讨论】:

    标签: python pandas dummy-variable


    【解决方案1】:
    from itertools import product
    
    (df.join(pd.get_dummies(zip(df["topic"], df["label"]))
               .reindex(columns=product(range(1, 5+1), ["positive", "negative"]),
                        fill_value=0)
               .mul(df["value"], axis="rows")
               .rename(columns=lambda c: f"t{c[0]}{c[1][0]}")))
    
    • 虚拟化“主题”-“标签”对
      • 用整个 (1...5) X (p, n) 可能的值重新索引以确保所有值都在这里
      • 并启动缺失值,例如样本数据中的“4”-“负”对为 0
    • 此时给定 1/0 帧,将其与“值”逐行相乘
      • 1/0s 将充当值的选择器
    • 列名如“(2, positive)”等;将它们重命名为“t2p”等。

    并将其与原始框架结合起来得到

       reviewId  topic  value     label  t1p  t1n  t2p  t2n  t3p  t3n  t4p  t4n  t5p  t5n
    0         1      2     -4  negative    0    0    0   -4    0    0    0    0    0    0
    1         2      2      9  positive    0    0    9    0    0    0    0    0    0    0
    2         3      0     -7  negative    0    0    0    0    0    0    0    0    0    0
    3         4      5     -1  negative    0    0    0    0    0    0    0    0    0   -1
    4         5      1     38  positive   38    0    0    0    0    0    0    0    0    0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2015-05-19
      • 2020-09-24
      • 2021-05-28
      • 1970-01-01
      • 2020-10-03
      相关资源
      最近更新 更多