在R语言中移除与另一数据框列名不匹配的数据框行
需求说明
现有两个DataFrame:
- df1(列名是Name、A、B、D):
Name A B D 1 2 3 4
- df2(第一列是Type,行值为A、B、C、D):
Type Cow Cat Dog A B C D
要删掉df2里那些Type值不在df1列名里的行——比如df1没有C列,所以df2的C行得删掉,最终要得到这样的结果:
Type Cow Cat Dog A B D
实现方法
用Pandas的isin()方法就能轻松搞定,代码如下:
import pandas as pd # 先构造符合题目结构的df1和df2 df1 = pd.DataFrame(columns=['Name', 'A', 'B', 'D'], data=[[1], [2], [3], [4]]) df2 = pd.DataFrame({ 'Type': ['A', 'B', 'C', 'D'], 'Cow': ['', '', '', ''], 'Cat': ['', '', '', ''], 'Dog': ['', '', '', ''] }) # 提取df1里除了Name之外的列名,这些是我们要保留的Type值 valid_types = df1.columns.drop('Name') # 筛选df2,只保留Type在valid_types里的行 filtered_df2 = df2[df2['Type'].isin(valid_types)] # 输出结果 print(filtered_df2)
代码解释
- 先按题目结构构造两个测试用的DataFrame
df1.columns.drop('Name')拿到df1里需要匹配的列名(A、B、D)df2['Type'].isin(valid_types)生成布尔列表,标记哪些行的Type值是有效的- 用这个布尔列表筛选df2,就能得到去掉无效行后的结果
内容的提问来源于stack exchange,提问作者Timo V
相关产品推荐
相关产品推荐

