逐行连接值

时间:2014-02-01 19:44:17

标签: python pandas concat

给定DataFrame df

    d       e       f
a    0     [2]     [3]
b  [1]       0     [3]
c  [0]  [2, 3]  [3, 1]

我只是想在轴= 1上附加值以获得结果:

    d       e       f    appended
a    0     [2]     [3]   [0,2,3]
b  [1]       0     [3]   [1,0,3]
c  [0]  [2, 3]  [3, 1]   [0,2,3,3,1]

令人惊讶的是df['appended'] = df.sum(axis=1)会这样做,如果不是0值(不是列表),它会为每一行返回零。

我知道这是一个愚蠢的问题,但我刚刚接手了大熊猫,我还没有感受到它。

你能提出什么建议吗?

@EDIT

是的,我试图用列表替换零(虽然我不愿意这样做,因为我需要那些零在我原来的df中保留零,并且创建一个新的df可能不是最好的选择?):< / p>

def mk_list(x):
    if not isinstance(x, list):
        x = [x]
    return x 

df2 = df.apply(mk_list)

无论如何这产生了所有NaN,我必须做错了。

d    [[nan, nan, nan]]
e    [[nan, nan, nan]]
f    [[nan, nan, nan]]

1 个答案:

答案 0 :(得分:0)

您可以通过使用您的值循环列表来将值应用于矩阵 想要应用并将它们附加到循环中的矩阵中。

from numpy import *


# list, matrice that gets the values from the list ls
matrice = []

# list with values to apply

ls= [1,2,3,4]

for i in xrange(len(ls)):
    matrice.append([])
    for j in range(i):
        matrice[i].append(i+j)
print matrice

其次: 规范化后,使用NAN的数组row / row.sum,因为你首先为你的matrice赋值,然后在matrice上调用规范化。你需要做相反的事情,你需要规范化矩阵并再次调用矩阵

1. create a matrice and assign some values
[[ 0.  2.  0.]
 [ 0.  0.  2.]
 [ 1.  1.  0.] 

matrice = stat_function()
2. Normalize rows, row /= row.sum()
[[ nan  nan  nan]
 [ nan  nan  nan]
 [ nan  nan  nan]

matrice = normalize_function()
3. Call the same matrice again
[[ 0.   1.   0. ]
 [ 0.   0.   1. ]
 [ 0.5  0.5  0. ]
matrice = stat_function()