【发布时间】: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 中使用列表可能会有些尴尬,而使用一些值是列表而一些是数字的列也可能会很尴尬。