簡體   English   中英

select dataframe 行如何根據索引值和列值判斷?

[英]How to select dataframe rows based on index value and columns value criteria?

我有一個 dataframe,它是n=9數據幀的堆疊版本:

df
        f     a   config
0   0.491 0.368  old.000
1   0.369 0.333  old.000
2   0.372 0.276  old.000
3   0.346 0.300  old.000
4   0.213 0.161  old.000
..    ...   ...      ...
212 1.000 1.000  fin.111
213 1.000 1.000  fin.111
214 1.000 1.000  fin.111
215 1.000 1.000  fin.111
216 1.000 1.000  fin.111

[1953 rows x 3 columns]

每個“堆疊”子數據幀對應於不同的config值,即:

df['config'].unique()
array(['old.000', 'fin.000', 'fin.001', 'fin.010', 'fin.011', 'fin.100',
       'fin.101', 'fin.110', 'fin.111'], dtype=object)

我想通過 pd.Series 給出的標准(由indexconfig值組成)“過濾”這個 dataframe:

ser_criteria
0      old.001
1      fin.101
2      fin.100
3      fin.101
4      fin.101
        ...   
212    fin.000
213    old.000
214    old.000
215    old.000
216    old.000
Length: 217, dtype: object

因此,我需要通過以下方式提供我的 output:

df_filtered
        f     a   config
0   0.481 0.368  old.001
1   0.569 0.333  fin.101
2   0.672 0.276  fin.100
3   0.378 0.111  fin.101
4   0.987 0.213  fin.101
..    ...   ...   ...   
212 0.500 0.111  fin.000
213 1.000 1.000  old.000
214 0.765 0.123  old.000
215 0.000 1.000  old.000
216 0.333 0.123  old.000

[217 rows x 3 columns]

更有效的方法是什么? 我能找到的唯一方法是逐個元素(從索引)執行此操作...

index轉換為兩個 DataFrame 中的index列並使用右連接:

df = (ser_criteria.rename('config')
                  .reset_index()
                  .merge(df.reset_index(), on=['index','config'],how='right')
                  .drop('index', axis=1))

如果過濾條件中的索引值不重要,您可以執行以下操作:

import pandas as pd

# Assign your dataframe to df (example)
df = pd.read_csv("Documents/dataframe.tsv", sep="\t")
df

f   a   config
0   0.491   0.368   old.000
1   0.369   0.333   old.000
2   0.372   0.276   old.000
3   0.346   0.300   old.000
4   0.213   0.161   old.000
212 1.000   1.000   fin.111
213 1.000   1.000   fin.111
214 1.000   1.000   fin.111
215 1.000   1.000   fin.111
216 1.000   1.000   fin.111


# Assign your filter series to filter (example)
filter = pd.Series(('old.001', 'fin.101', 'fin.100', 'fin.101', 'fin.101', 'fin.000', 'old.000', 'old.000', 'old.000', 'old.000'))
filter

0    old.001
1    fin.101
2    fin.100
3    fin.101
4    fin.101
5    fin.000
6    old.000
7    old.000
8    old.000
9    old.000
dtype: object

# Then subset the dataframe by which rows have a config value in your filter
df[df['config'].isin(filter)]

暫無
暫無

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

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