一种遍历行和列(在熊猫数据框中)的方法,根据条件选择行和列以将另一个数据框放入熊猫中

时间:2019-11-18 13:36:09

标签: python pandas

我有一个超过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   

我想创建一个新的数据框,仅在它们具有以下条件时选择站点和年份:

  • 2019年的价值
  • 如果2019年的价值大于或等于未来几年的价值
  • 如果明年的价值更大,那么前一年的价值
  • 如果下一年的价值小于上一年

因此该示例的输出为

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

但是出现语法错误

2 个答案:

答案 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'])]