Python 迭代数据帧并存储结果

Python 迭代数据帧并存储结果,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,看起来像这样: columns = ['C24H31O8', 'C23H27O9', 'C22H23O10', 'C21H19O11', 'C20H15O12','C19H11O13'] values= [[ 0., 37., 74., 111., 148., 185.], [ -37., 0., 37., 74., 111., 148.], [ -74., -37., 0., 37., 7

我有一个数据框,看起来像这样:

columns = ['C24H31O8', 'C23H27O9', 'C22H23O10', 'C21H19O11', 'C20H15O12','C19H11O13']

values= [[   0.,   37.,   74.,  111.,  148.,  185.],
         [ -37.,    0.,   37.,   74.,  111.,  148.],
         [ -74.,  -37.,    0.,   37.,   74.,  111.],
         [-111.,  -74.,  -37.,    0.,   37.,   74.],
         [-148., -111.,  -74.,  -37.,    0.,   37.],
         [-185., -148., -111.,  -74.,  -37.,    0.]]
您可以使用

df = pd.DataFrame(data=values, index=columns)
我希望按如下方式迭代我的数据帧:

迭代时,在第C24H31O8行中,您会在第1列中找到37。现在,转到第1行并再次迭代。如果您再次找到数字37-在本例中,您在第三列中找到37-转到第三行,再次搜索37等

我想要的输出应该是一个链:

37 : C24H31O9 --> C23H27O9 --> C22H23O10 --> C21H19O11 ...

(为每个值做点什么)

如果我正确理解了这个问题,这应该是可行的:

columns= pd.Index(['C24H31O8', 'C23H27O9', 'C22H23O10', 'C21H19O11', 'C20H15O12','C19H11O13'],dtype='object')

values=np.array([[   0.,   37.,   74.,  111.,  148.,  185.],
               [ -37.,    0.,   37.,   74.,  111.,  148.],
               [ -74.,  -37.,    0.,   37.,   74.,  111.],
               [-111.,  -74.,  -37.,    0.,   37.,   74.],
               [-148., -111.,  -74.,  -37.,    0.,   37.],
               [-185., -148., -111.,  -74.,  -37.,    0.]])

df = pd.DataFrame(values, columns)

def build_string(df, i):
    row = 0
    chain = df.index[0]
    while True:
        try:
            row = df.iloc[row][df.iloc[row] == i].index[0]
            chain += f"--> {df.index[row]}"
        except IndexError:
            break
    return chain
输出:

>>> build_string(df, 37)
'C24H31O8--> C23H27O9--> C22H23O10--> C21H19O11--> C20H15O12--> C19H11O13'

IIUC:

输出(
out\u dict
):


谢谢你的回答,当我尝试使用一个循环并对所有值进行迭代时,37,74111,我需要得到不同的结果,你得到的结果是相同的,而且我不知道为什么我会进入无限循环,你应该编辑for循环37的内部,我不确定我是否遵循。我的代码中没有循环。您只需要提取,例如,
out\u dict[37.0]
>>> {int(i): build_string(df, i) for i in df.iloc[0] if i > 0}
{37: 'C24H31O8--> C23H27O9--> C22H23O10--> C21H19O11--> C20H15O12--> C19H11O13',
 74: 'C24H31O8--> C22H23O10--> C20H15O12',
 111: 'C24H31O8--> C21H19O11',
 148: 'C24H31O8--> C20H15O12',
 185: 'C24H31O8--> C19H11O13'}
df = pd.DataFrame(values, columns = columns)
s = df.where(df>0).stack()
out_dict = s.index.get_level_values(1).groupby(s)
{37.0: Index(['C23H27O9', 'C22H23O10', 'C21H19O11', 'C20H15O12', 'C19H11O13'], dtype='object'),
 74.0: Index(['C22H23O10', 'C21H19O11', 'C20H15O12', 'C19H11O13'], dtype='object'),
 111.0: Index(['C21H19O11', 'C20H15O12', 'C19H11O13'], dtype='object'),
 148.0: Index(['C20H15O12', 'C19H11O13'], dtype='object'),
 185.0: Index(['C19H11O13'], dtype='object')}