【问题标题】:Python - Pandas - Combining rows of multiple columns into single row in dataframe based on categorical valuePython - Pandas - 根据分类值将多列的行组合成数据框中的单行
【发布时间】:2018-02-26 23:31:09
【问题描述】:

我正在处理 Python 3.4 中涉及 Pandas 的问题。我被困在一个涉及重新组织我的数据框的小部分。我会更具体。

我有一个名为“模型”的表格,格式为:

Model Input

我希望得到所需的输出形式相当于:

我希望得到类似的输出:

Desired Output

我已经调查过Convert a python dataframe with multiple rows into one row using python pandas?How to combine multiple rows into a single row with pandas。我对是否应该使用 groupby 或数据透视表感到困惑。我尝试使用两者,但要么得到 KeyError,要么得到我想要的正确格式。是否有任何特定的库可以帮助完成上述任务?

【问题讨论】:

标签: python python-3.x pandas dataframe pandas-groupby


【解决方案1】:

您可以使用 groupby 并申请:

num_V = 5
max_row = df.groupby('ID').ID.count().max()
df2= (
        df.groupby('ID')
        .apply(lambda x: x.values[:,1:].reshape(1,-1)[0])
        .apply(pd.Series)
        .fillna(0)
)

df2.columns = ['V{}_{}_{}'.format(i+1,j,i) for j in range(max_row) for i in range(num_V)]

【讨论】:

  • 我完全按照您的描述输入了代码,但在 f'V{I+1}_{j}_{I}' 行出现语法错误。我在 Linux 终端上运行 Python 3.4。
  • @VinayAshokkumar ,这是因为您的 python 版本低于 3.6 并且不支持该语法。请使用更新后的答案重试。
  • 语法被接受。但是我得到了一个新的 TypeError:set_axis() 为参数“轴”获得了多个值。我尝试在没有 set_axis() 命令的情况下运行程序,这些表在结构上按照我想要的方式进行了重组。谢谢你。有没有办法解决这个错误?
  • 又是因为版本不兼容。我没有安装低版本,请立即尝试。
  • 我收到一个名为长度不匹配的新错误:预期轴有 30 个元素,新值有 24 个元素。但我想我知道为什么会出现这个错误。当我早些时候输出表格时(没有 set_axis()),我注意到在四列之后,ID 列(保存值 1 和 2)被重复。这发生在每四列之后,这就是为什么结果应该是 30 而应该是 24。(ID 被不必要地打印了 6 次)。有没有办法摆脱重复的 ID 列并只显示数字结果?感谢您迄今为止所做的努力。非常感谢您的帮助!
猜你喜欢
  • 2019-01-24
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 2011-07-21
  • 2021-04-14
  • 2015-01-15
相关资源
最近更新 更多