我有一个超过1500行的数据框 表格的样本就是这样
Site 2019 2020 2021 ....
ABC 0 1 2
DEF 1 1 2
GHI 2 0 1
JKL 0 0 0
MNO 2 1 1
我想创建一个新的数据框,仅在它们具有以下条件时选择站点和年份:
因此该示例的输出为
Site 2019 2020 2021 ....
DEF 1 1 1
GHI 2
MNO 2 1 1
DEF在2021年达到1,因为在2020年达到1
我尝试使用以下内容在2019列中查找具有值的行,但
for i.j in df.iterrows():
if when j=2
if i >0
return value
但是出现语法错误
答案 0 :(得分:1)
在不循环行的情况下,您可以执行以下操作:
df1 = df[(df[2019] > 0) & (df.loc[:, 2020:].min(axis=1) <= df.loc[:, 2019])]
cols = df1.columns.tolist()
for i in range(2, len(cols)):
df1[cols[i]] = df1.loc[:, cols[i - 1: i + 1]].min(axis=1)
df1
输出:
2019 2020 2021
DEF 1 1 1
GHI 2 0 0
MNO 2 1 1
答案 1 :(得分:0)
只要您没有太多的列,这应该可以工作。为需要比较的每一组年份添加另一个比较。除非您使用.copy()进行深拷贝,否则这将是对原始df的引用。
new_df = df[(df['2019'] > 0) & (df['2019'] <= df['2020']) & (df['2020'] <= df['2021']) & (df['2021'] <= df['2022'])]