Python将值附加到唯一对象列表

时间:2015-12-04 20:02:22

标签: python excel list pandas append

请原谅这个问题的任何天真。在过去的几个月里,我一直在努力形成对编程的基本理解。有很多差距,所以我可能不知道我不知道的是什么。

我正在使用的数据集目前处于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格式。如果你有一个更简单的方法,我会很乐意看到它。

1 个答案:

答案 0 :(得分:0)

感谢@johnchase提供了解决此问题的方法。

如果使用DataFrame,则会使用here概述正确的方法。

我试图在列上加入两个数据帧(例如,从上面的链接开始):

>>> 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应该是一个非常简单的操作。

谢谢