我有一个包含4行4列的excel文件,列标签分别为1,2,3,4
1 2 3 4
Row 1 12 10 7 6
Row 2 16 22 9 18
Row 3 26 10 10 5
Row 4 24 5 17 1
我希望访问第3行的col 1整数值和第4行的col 1整数值,以检查两个单元格相加是否等于50。在这种情况下,任何(p,q,r)组合都应加上(row q,col p)和(row r,col p)值,如果值= 50,则返回(p,q,r)作为组合。
在这种情况下,输出应为:(1,3,4)。
import pandas as pd
import numpy as np
a = [1,2,3,4]
df = pd.read_excel('example.xlsx', sheetname='Sheet1')
combo = [(p,q,r) for p in a for q in a for r in a
if (df.iloc[q,p] + df.iloc[r,p] = 50)]
print (combo)
更新:
对此进行了尝试,但稍作修改,即我正在表格的各列之间进行计算:
组合(1、3、4)现在应在以下单元格中查找值
(1,1)(1,3)(1,4)
(3,1)(3,3)(3,4)
(4,1)(4,3)(4,4)
import numpy as np
import pandas as pd
df = pd.read_excel('example.xlsx', sheetname='Sheet1')
df.index = list(range(1, df.shape[1] + 1))
df.columns = list(range(1, df.shape[1] + 1))
combo = [(p,q,r) for p in df.columns for q in df.columns for r in df.columns
if q > p and r > q and r > p
and df.loc[p,p] - df.loc[p,q] == df.loc[q,p] - df.loc[q,q]]
我收到以下错误:
ValueError:长度不匹配:预期轴包含3个元素,新值包含4个元素
答案 0 :(得分:0)
首先,确保您的DataFrame索引和列都是从1开始的整数索引(与输入数据一致):
df.index = list(range(1, df.shape[0] + 1))
df.columns = list(range(1, df.shape[1] + 1))
接下来,您的列表理解是正确的:
[(p,q,r) for p in df.index for q in df.index for r in df.columns
if df.loc[q,p] + df.loc[r,p] == 50]
# Output
[(1, 3, 4), (1, 4, 3)]