Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对存储在dataframe中的多个列表求和_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 对存储在dataframe中的多个列表求和

Python 对存储在dataframe中的多个列表求和,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个包含多个列表的数据框,存储为: 我有两个数据帧: df1.ix[1:3] DateTime Col1 Col2 2018-01-02 [1, 2] [11, 21] 2018-01-03 [3, 4] [31, 41] 我想对df1中的列表求和,得到: DateTime sumCol 2018-01-02 [12, 23] 2018-01-03 [34, 45] 我尝试了numpy.sum(df1,axis=1),但这会

我有一个包含多个列表的数据框,存储为:

我有两个数据帧:

df1.ix[1:3]
DateTime      Col1     Col2 
2018-01-02    [1, 2]   [11, 21]
2018-01-03    [3, 4]   [31, 41]
我想对df1中的列表求和,得到:

DateTime      sumCol 
2018-01-02    [12, 23]
2018-01-03    [34, 45]
我尝试了
numpy.sum(df1,axis=1)
,但这会导致列表连接而不是sum

编辑:
我的原始数据帧有两列以上

使用列表理解和
np.array

df.assign(sumCol=[np.array(x) + np.array(y) for x, y in zip(df.Col1, df.Col2)])

如果阵列的长度始终相同:

df.assign(sumCol=[np.stack([x,y]).sum(0) for x, y in zip(df.Col1, df.Col2)])
要将此应用于许多列,可以使用
iloc

zip(*df.iloc[:, 1:].values.T)

下面是一个更宽数据帧的示例:

   A       B       C       D
0  1  [1, 2]  [1, 2]  [1, 2]
1  2  [3, 4]  [3, 4]  [3, 4]
2  3  [5, 6]  [5, 6]  [5, 6]

使用
zip
df.values

df.assign(sumCol=[np.stack(a).sum(0) for a in zip(*df.iloc[:, 1:].values.T)])


不要这样做。使用Pandas数据帧是一种效率极低的方法,因为您的一系列列表是数据类型
object
,无法通过NumPy直接访问

但是,如果你坚持的话,至少部分地将你的计算矢量化。例如,使用NumPy:

arr1 = np.array(df['Col1'].values.tolist())
arr2 = np.array(df['Col2'].values.tolist())

df['Sum'] = pd.DataFrame(arr1 + arr2).values.tolist()

print(df)

     DateTime    Col1      Col2       Sum
0  2018-01-02  [1, 2]  [11, 21]  [12, 23]
1  2018-01-03  [3, 4]  [31, 41]  [34, 45]

旁注,
ix
自Pandas v0.20.0以来一直被弃用。改用
loc

如何修改“np.array(x)+np.array(y)”。@Zanam添加了一个示例
   A       B       C       D    sumCol
0  1  [1, 2]  [1, 2]  [1, 2]    [3, 6]
1  2  [3, 4]  [3, 4]  [3, 4]   [9, 12]
2  3  [5, 6]  [5, 6]  [5, 6]  [15, 18]
arr1 = np.array(df['Col1'].values.tolist())
arr2 = np.array(df['Col2'].values.tolist())

df['Sum'] = pd.DataFrame(arr1 + arr2).values.tolist()

print(df)

     DateTime    Col1      Col2       Sum
0  2018-01-02  [1, 2]  [11, 21]  [12, 23]
1  2018-01-03  [3, 4]  [31, 41]  [34, 45]