【问题标题】:select the Rows which contains same text in last two columns of data frame in python pandas在 python pandas 的最后两列数据框中选择包含相同文本的行
【发布时间】:2020-04-16 22:23:46
【问题描述】:

我有一个如下所示的数据框

import pandas as pd

k={'ID':[1,2,3,4,5,6],'m1':['jj','nn','jj','nn','nn','nn'],
   'm2':['jj','nn','nn','jj','jj','jj'],
   'm3':['jj','','nn','jj','jj','jj'],
   'm4':['nn','','nn','jj','jj','jj'],
   'm5':['nn','','','jj','jj','nn'],
   'm6':['','','','jj','jj','nn']}

df=pd.DataFrame(data=k)

ID  m1  m2  m3  m4  m5  m6
1   jj  jj  jj  nn  nn  
2   nn  nn              
3   jj  nn  nn  nn      
4   nn  jj  jj  jj  jj  jj
5   nn  jj  jj  jj  jj  jj
6   nn  jj  jj  jj  nn  nn

我们必须在最后两列中选择包含'nn'的ID 但每一行的最后一列(ID)不同

我想要的结果如下

ID  last1   last2   last two columns are nn
1   nn       nn         yes
2   nn       nn         yes
3   nn       nn         yes
6   nn       nn         yes 

【问题讨论】:

  • 你的意思可能是 df=pd.DataFrame(index=k.pop("ID"), data=k)

标签: python pandas loops if-statement


【解决方案1】:

IIUC meltgroupby 然后选择 tail 2

s=df.melt('ID').loc[lambda x : x.value!=''].groupby('ID').tail(2)
s['variable']=s.groupby('ID').cumcount()
s=s.pivot(*s.columns)
s
Out[86]: 
variable   0   1
ID              
1         nn  nn
2         nn  nn
3         nn  nn
4         jj  jj
5         jj  jj
6         nn  nn

我们得到上面的df之后,我们就可以把它捡起来了

【讨论】:

    【解决方案2】:

    试试这个

    def double_nn_filter(row):
        row[row == ''] = None
        return row.dropna().tail(2).eq("nn").all()
    
    
    df.apply(double_nn_filter, axis=1)
    

    结果:

    1     True
    2     True
    3     True
    4    False
    5    False
    6     True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2019-06-26
      • 2020-11-15
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多