Pandas: 每个单元格都是一个列表,单元格之间如何进行元素减法?
Pandas: each cell is a list, how to perform element-wise subtraction between cells?
我有两个数据框:
df1 = l1 l2 l3
[4,2,1] [8,9,6] [7,4,5]
df2 = l1 l2 l3
[2,1,0] [7,7,2] [6,1,2]
我想,对于每个单元格,在 df1
和 df2
之间执行元素减法(对于每个单元格和每个元素,df1 - df2)。
所以 new_df 将是:
new_df = l1 l2 l3
[2,1,1] [1,2,,4] [1,3,4]
最有效的方法是什么?
谢谢
我不确定你是如何得到这个相当笨重的数据结构的,但这里有一个笨拙的解决方案:
>>> df1.applymap(np.array) - df2
l1 l2 l3
0 [2, 1, 1] [1, 2, 4] [1, 3, 3]
如果 DataFrame 中每列的值数量始终相同,请使用:
df1 = pd.DataFrame({'l1':[[4,2,1],[4,2,1]],'l2':[[8,9,6],[8,9,6]],'l3':[[7,4,5], [7,4,5]]})
df2 = pd.DataFrame({'l1':[[2,1,0],[2,1,0]],'l2':[[7,7,2], [2,1,0]],'l3':[[6,1,2], [2,1,0]]})
a = np.array(df1.to_numpy().tolist()) - np.array(df2.to_numpy().tolist())
df = pd.DataFrame(a.tolist(), index=df1.index, columns=df2.columns)
print (df)
l1 l2 l3
0 [2, 1, 1] [1, 2, 4] [1, 3, 3]
1 [2, 1, 1] [6, 8, 6] [5, 3, 5]
如果您想要一个非常简单易懂的解决方案,您可以使用 for 循环
df1 = pd.DataFrame([[[4,2,1],[8,9,6],[7,4,5]]])
df2 = pd.DataFrame([[[2,1,0],[7,7,2],[6,1,2]]])
result = []
for lst1, lst2 in zip(df1.values[0], df2.values[0]):
result.append([i - j for i,j in zip(lst1, lst2)])
result = pd.DataFrame([result])
``
我有两个数据框:
df1 = l1 l2 l3
[4,2,1] [8,9,6] [7,4,5]
df2 = l1 l2 l3
[2,1,0] [7,7,2] [6,1,2]
我想,对于每个单元格,在 df1
和 df2
之间执行元素减法(对于每个单元格和每个元素,df1 - df2)。
所以 new_df 将是:
new_df = l1 l2 l3
[2,1,1] [1,2,,4] [1,3,4]
最有效的方法是什么?
谢谢
我不确定你是如何得到这个相当笨重的数据结构的,但这里有一个笨拙的解决方案:
>>> df1.applymap(np.array) - df2
l1 l2 l3
0 [2, 1, 1] [1, 2, 4] [1, 3, 3]
如果 DataFrame 中每列的值数量始终相同,请使用:
df1 = pd.DataFrame({'l1':[[4,2,1],[4,2,1]],'l2':[[8,9,6],[8,9,6]],'l3':[[7,4,5], [7,4,5]]})
df2 = pd.DataFrame({'l1':[[2,1,0],[2,1,0]],'l2':[[7,7,2], [2,1,0]],'l3':[[6,1,2], [2,1,0]]})
a = np.array(df1.to_numpy().tolist()) - np.array(df2.to_numpy().tolist())
df = pd.DataFrame(a.tolist(), index=df1.index, columns=df2.columns)
print (df)
l1 l2 l3
0 [2, 1, 1] [1, 2, 4] [1, 3, 3]
1 [2, 1, 1] [6, 8, 6] [5, 3, 5]
如果您想要一个非常简单易懂的解决方案,您可以使用 for 循环
df1 = pd.DataFrame([[[4,2,1],[8,9,6],[7,4,5]]])
df2 = pd.DataFrame([[[2,1,0],[7,7,2],[6,1,2]]])
result = []
for lst1, lst2 in zip(df1.values[0], df2.values[0]):
result.append([i - j for i,j in zip(lst1, lst2)])
result = pd.DataFrame([result])
``