遍历Pandas DataFrame并存储结果

问题描述 投票:2回答:1

我有一个看起来像这样的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.,   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 ...

(为每个值做某事)

python pandas dataframe
1个回答
0
投票

如果我正确理解了这个问题,这应该可以工作:

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] == 37].index[0]
            chain += f"--> {df.index[row]}"
        except IndexError:
            break
    return chain

输出:

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

>>> for i in df.iloc[0]:
    print(f"{int(i)}: {build_string(df, i)}")
0: C24H31O8--> C23H27O9--> C22H23O10--> C21H19O11--> C20H15O12--> C19H11O13
37: C24H31O8--> C23H27O9--> C22H23O10--> C21H19O11--> C20H15O12--> C19H11O13
74: C24H31O8--> C23H27O9--> C22H23O10--> C21H19O11--> C20H15O12--> C19H11O13
111: C24H31O8--> C23H27O9--> C22H23O10--> C21H19O11--> C20H15O12--> C19H11O13
148: C24H31O8--> C23H27O9--> C22H23O10--> C21H19O11--> C20H15O12--> C19H11O13
185: C24H31O8--> C23H27O9--> C22H23O10--> C21H19O11--> C20H15O12--> C19H11O13
© www.soinside.com 2019 - 2024. All rights reserved.