根据另一列的值在pandas的列中创建值列表

时间:2018-11-07 22:22:28

标签: python pandas list

我有一个包含3列的数据框。我想获取第一列中与第二列中的最后一个条目相对应的值,以及第一列中与第二列中的相关值与第二列的最后一个条目至少有8个差异的第一列中的值,并将它们放在列表中。由于18是引用,因此我想从列表中的col1中获取其关联的值,并在输出中具有一个数据帧。我试图弄清楚如何在熊猫中做到这一点。

col1  col2   col3
 a      0      1
 b      2      1
 c      13     1
 d      18     1

我想要的输出是:

    col1   col3
 [d, b, a]  1

先谢谢了。

1 个答案:

答案 0 :(得分:0)

根据我对您的问题d的解释,不应包括在内。这是因为18 - 18 = 0 < 8

无论如何,我对这个问题采取了三步法。

# Get the desired reference value
last_entry = df.iloc[-1][col2]

# Select only rows whose difference is at least 8 
# Or the case where it is the last entry 
qry = "{ref}-col2 >= 8 or index=={idx}".format(ref=last_entry, idx=len(df)-1)
diff_gt_8 = df.query(qry) 

# For each value of col3 get a list of values of col1 and convert to DataFrame
pd.DataFrame( diff_gt_8.groupby(col3)[col1].apply(list) )

要将其与您以前的值进行比较:

df[(df[col2] - df[col2].shift(1)) < 12]

请注意,df[col2].shift(1)返回的序列的所有行都向下移1。因此,我们可以将df[col2]中的行与其前一行进行比较。 因为它是NaN(不是数字),所以永远不会包含第一个值。

更新

如果我正确理解了您的新问题,这就是您想要的。

last_two_rows = df.iloc[-2:, :] # Select last two rows
if (last_two_rows.iloc[-1][col2] - last_two_rows.iloc[-2][col2]) < 12:
    last_two_rows[col1].iloc[-2] = np.nan
last_two_rows[[col1]]