我有一个包含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
先谢谢了。
答案 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]]