给定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]]
答案 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()