簡體   English   中英

如果根據數據幀的行和列值滿足特定條件,如何獲取列標題?

[英]How to fetch a column header if a particular condition is met based on row and column value of the dataframe?

我有一個這樣的數據框:

col1    x   y   z
A      yes  no  yes
B      no   no  yes
C      no   yes no
D      yes  no  yes
E      no   no  yes
F      yes  yes no

我想選擇這樣的數據,如果我的標准是找到A所有yes ,我應該得到[x,z] ,即A的值為yes

如果B[z] C應給出[y]

該怎么辦?

首先按col1列創建索引以按loc進行索引,按值進行比較,最后獲取要list index值:

df = df.set_index('col1')

def get_val(df, idx, val):
    a = df.loc[idx].eq(val)
    return a.index[a].tolist()

print (get_val(df, 'A', 'yes'))
['x', 'z']

print (get_val(df, 'B', 'yes'))
['z']

print (get_val(df, 'C', 'yes'))
['y']

你可以用

In [499]: df.eq('yes').dot(df.columns)[df.col1.eq('A')]
Out[499]:
0    xz
dtype: object

In [500]: df.eq('yes').dot(df.columns)[df.col1.eq('B')]
Out[500]:
1    z
dtype: object

In [501]: df.eq('yes').dot(df.columns)[df.col1.eq('C')]
Out[501]:
2    y
dtype: object

這是另一個創建函數的函數:

df.set_index('col1', inplace=True)

def find_yes(df, x):
    return df.columns[df.loc[x] == 'yes'].tolist()

完整的例子

import pandas as pd

data = '''\
col1    x   y   z
A      yes  no  yes
B      no   no  yes
C      no   yes no
D      yes  no  yes
E      no   no  yes
F      yes  yes no'''

fileobj = pd.compat.StringIO(data)
df = pd.read_csv(fileobj, sep='\s+')

df.set_index('col1', inplace=True)

def find_yes(df, x):
    return df.columns[df.loc[x] == 'yes'].tolist()

print(find_yes(df, 'A'))
print(find_yes(df, 'B'))

返回值:

['x', 'z']
['z']

為您提供的groupby一種選擇-如何使用melt然后使用groupby

from io import StringIO

import pandas as pd

data = StringIO('''col1    x   y   z
A      yes  no  yes
B      no   no  yes
C      no   yes no
D      yes  no  yes
E      no   no  yes
F      yes  yes no''')

df = pd.read_csv(data, sep='\s+')

m = df.melt(id_vars='col1')
matches = m[m['value'] == 'yes'].groupby('col1')\
                                .agg({'variable': list})

這給出了以下數據框:

     variable
col1         
A      [x, z]
B         [z]
C         [y]
D      [x, z]
E         [z]
F      [x, y]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM