【问题标题】:Python append value to list of unique objectsPython将值附加到唯一对象列表
【发布时间】:2016-03-09 20:49:43
【问题描述】:

请原谅这个问题的任何幼稚。在过去的几个月里,我一直在积极尝试形成对编程的基本理解。有很多空白,所以我可能不知道我不知道什么。

我正在使用的数据集目前在 excel 中,因此 VBA 可能是一个不错的选择,但是我想借此机会使用 Python。我会将数据导入为 CSV,然后对其进行操作。这似乎非常适合熊猫数据框...

我有一个对象列表,每个对象都有几个命名值:

 Object Name | Value Name  | Value        |
|:-----------|------------:|:------------:|
| a1         |        top1 |     20     
| a1         |        top2 |     30
| a1         |        top3 |     65
| a2         |        top1 |     28      
| a2         |        top2 |     32
| a3         |        top1 |     89
| a3         |        top2 |     120
| a3         |        top3 |     160
...

在单独的列表中,每个对象都有一个附加值

 Object Name | Value Name  | Value        |
|:-----------|------------:|:------------:|
| a1         |        base |     99     
| a2         |        base |     250
| a3         |        base |     600
| a4         |        base |     87
| a5         |        base |     1202
| a6         |        base |     58
...

我想为每个对象附加新的值/值名称。

输出应如下所示(星号表示附加值):

 Object Name | Value Name  | Value        |
|:-----------|------------:|:------------:|
| a1         |        top1 |     20     
| a1         |        top2 |     30
| a1         |        top3 |     65
| a1 *       |        base |     99
| a2         |        top1 |     28      
| a2         |        top2 |     32
| a2 *       |        base |     250
| a3         |        top1 |     89
| a3         |        top2 |     120
| a3         |        top3 |     160
| a3 *       |        base |     600

粗略地说,这是我想要完成的:

for each object in objects:
    if df_Objects[ObjectName] = df_Object_Base[ObjectName]:
        df_Objects = df_Objects + {Value_Name, Value}

我最近才成功安装了 pandas,但我并没有把它用得太多。最终目标是将修改后的数据导出为 CSV。如果您有更简单的方法,我会很乐意看到它。

【问题讨论】:

  • 听起来您正在尝试基于一列合并两个数据框,尽管并不完全清楚。如果您要包含一个输出应该是什么样子的示例,它可能会澄清这个问题。
  • @johnchase 问题已被编辑以显示所需的输出

标签: python excel list pandas append


【解决方案1】:

感谢 @johnchase 提供见解以找到该问题的解决方案。

here 概述了正确的方法(如果使用 DataFrame)。

我试图在一个列上加入两个数据框(上面链接的示例):

>>> A              >>> B
lkey value         rkey value
0   foo  1         0   foo  5
1   bar  2         1   bar  6
2   baz  3         2   qux  7
3   foo  4         3   bar  8

-

>>> merge(A, B, left_on='lkey', right_on='rkey', how='outer')
lkey  value_x  rkey  value_y
0  foo   1        foo   5
1  foo   4        foo   5
2  bar   2        bar   6
3  bar   2        bar   8
4  baz   3        NaN   NaN
5  NaN   NaN      qux   7

从这里使用 pandas 导出为 csv 应该是一个非常简单的操作。

谢谢

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 2021-12-10
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多