pandas 如何过滤列值为其他值的数据框

fcwjkofz  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(97)

我有两个 Dataframe 列表。我想过滤第一个条件(〉或〈)存在于另一个。第一个,我会过滤:

df1 = pd.DataFrame({'Type': ['car', 'bike','car', 'motorbike','bike'], 'Amount': [40, 3,50, 699,60], 'Count': [10, 1,2,4,4]})
df2 = pd.DataFrame({'Parameters': ['Amount', 'Count'], 'car': [30, 3,], 'bike': [40,4,]})

我想提出一个条件:过滤所有的 Dataframe :我需要df1 Dataframe ,其类型等于df2(数量和计数)中相应列的car或bike或motorbike〉列。因此,结果为:

dfTotal = pd.DataFrame({'Type': ['car'], 'Amount': [40], 'Count': [10]})

UPDATE:如果我现在有了df1会发生什么?因为我可以有更多相同类型,具有不同的数量和计数,而且它们是不同的 Dataframe 。在这种情况下,自定义解决方案不起作用,因为类型不是不同的。

mwkjh3gx

mwkjh3gx1#

您可以用途:

# set the indexes, transpose df2, then check if all columns match
keep = df1.set_index('Type').ge(df2.set_index('Parameters').T).all(axis=1)

# filter types to keep
out = df1.loc[df1['Type'].isin(keep[keep].index)]

输出:

Type  Amount  Count
0  car      40     10

使用的输入:

df1 = pd.DataFrame({'Type': ['car', 'bike', 'motorbike'],
                    'Amount': [40, 3, 699],
                    'Count': [10, 1,2]})
df2 = pd.DataFrame({'Parameters': ['Amount', 'Count'],
                    'car': [30, 3],
                    'bike': [40, 8]})
每列的自定义条件:
df1 = pd.DataFrame({'Type': ['car', 'bike', 'motorbike'], 'Amount': [40, 3, 699], 'Count': [10, 1,2]})
df2 = pd.DataFrame({'Parameters': ['Amount', 'Count'], 'car': [30, 40], 'bike': [3, 8]})

tmp1 = df1.set_index('Type')
tmp2 = df2.set_index('Parameters').T

# combine custom conditions
keep = tmp1['Amount'].gt(tmp2['Amount']) & tmp1['Count'].lt(tmp2['Count'])

# filter types to keep
out = df1[df1['Type'].map(keep)]

相关问题