【问题标题】:Concatenate values row-wise逐行连接值
【发布时间】:2014-02-01 19:44:17
【问题描述】:

给定一个 DataFrame df:

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

我只想在 axis=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 值(不是列表),它会为每一行返回零。

我知道这是一个愚蠢的问题,但我最近才开始接触 pandas,我还没有感觉到。

你有什么建议吗?

@编辑

是的,我尝试用列表替换零(尽管我不想这样做,因为我需要这些零在我的原始 df 中保持零,并且创建一个新的 df 可能不是最佳选择?):

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] 替换零?
  • 我试过了,看看我的编辑。
  • 您需要使用applymap 而不是apply 这样做。但更一般地说,在 DataFrames 中使用列表可能会有些尴尬,而使用一些值是列表而一些是数字的列也可能会很尴尬。

标签: python pandas concat


【解决方案1】:

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

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 是因为您首先将值分配给矩阵,然后调用矩阵的归一化。你需要反过来做,你需要对矩阵进行归一化并再次调用矩阵

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()

【讨论】:

  • 您好,感谢您的回答,但您确定您发布的是相关主题吗?这没有找到我的问题。
  • 视情况而定,您可以将数据帧转换为数组,以这种方式附加值和规范化它们可能更容易,请参阅线程 stackoverflow.com/questions/13187778/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 2020-05-24
  • 2021-07-08
  • 1970-01-01
相关资源
最近更新 更多