我有一个数据框 逻辑是如果 col1 不为零,则返回 col1。 如果 col 1 为零,则返回 col2(非零)。 如果 col 2 为零,则返回 col3。 我们不需要为 col4 做任何事情 我的代码如下所示,但它只返回 col1 我试过 .any() 和 .all(),它也不起作用。 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有一个 df ,其中包含许多列的年度数据。 我有代码来提取每列中的最后一个值,不包括 0。 我想在我拉的行之前拉第 n 行,问题是所有这些值的索引都不相同。 我想在每个 col 上使用 df_periods 中的 n 来拉取第 n 个值。 我想尝试索引我从 endval 获得的值,但因为它们不是来自同一行,所以它似乎不起作用。 对此有何想法?
df=
col1 col2 col3 col4 col5
8 9 6 7 1
8 9 6 7 1
8 9 6 7 1
8 9 6 7 1
8 9 6 7 NaN
8 NaN 6 7 NaN
8 NaN 6 7 NaN
8 NaN 6 7 NaN
df_periods=
col1 col2 col3 col4 col5
4 3 5 4 4
endval = df.stack().groupby(level=1).last()
尝试:
# remove the `nan` values
s = df.stack().reset_index(name='value')
# enumerate date from bottom up
count_from_bottom = s[::-1].groupby('level_1').cumcount()[::-1]
# compare the enumeration with the respective threshold and extract data
endval = s.loc[count_from_bottom < s['level_1'].map(df_periods.iloc[0])]
输出:
level_0 level_1 value
4 0 col5 1.0
9 1 col5 1.0
11 2 col2 9.0
14 2 col5 1.0
16 3 col2 9.0
17 3 col3 6.0
19 3 col5 1.0
20 4 col1 8.0
21 4 col2 9.0
22 4 col3 6.0
23 4 col4 7.0
24 5 col1 8.0
25 5 col3 6.0
26 5 col4 7.0
27 6 col1 8.0
28 6 col3 6.0
29 6 col4 7.0
30 7 col1 8.0
31 7 col3 6.0
32 7 col4 7.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.