我确定它可能在SO
中的某个地方,但是我似乎找不到它。我正在尝试从sum
lists
在pandas
中表达的df
值。例子
我可以使用array
中的以下代码来实现此目的:
array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
array = [sum(a) for a in zip(*array)]
但是当值包含在df
中时,我将无法正常工作。这是我的尝试:
d = ({
'Val' : [[1,2,3],[4,5,6],[7,8,9]],
})
df = pd.DataFrame(data = d)
df = [sum(a) for a in zip(df['Val'])]
print(df)
df = [sum(a) for a in zip(df['Val'])]
TypeError: unsupported operand type(s) for +: 'int' and 'list'
答案 0 :(得分:1)
您缺少的是将其发送到列表对象中的列表中,请执行以下操作:
d = ({
'Val' : [[1,2,3],[4,5,6],[7,8,9]],
})
df = pd.DataFrame(data = d)
df = [sum(a) for a in df['Val'].tolist()]
用数据框进行列表理解真的很慢。
答案 1 :(得分:1)
您缺少要打开包装的*
星号运算符:
df = [sum(a) for a in zip(*df['Val'])]
print(df)
[12, 15, 18]
现在它传递了列表,这就是为什么出现此错误的原因:
for a in zip(df['Val']):
print(a)
print('\n')
for a in zip(*df['Val']): # <--- notice the *
print(a)
# Output
([1, 2, 3],)
([4, 5, 6],)
([7, 8, 9],)
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)
答案 2 :(得分:1)
首先转换为np.array
。
df.Val = df.Val.apply(lambda x: np.array(x))
然后您可以使用.sum
df.Val.sum()
array([12, 15, 18])