根据熊猫中第二个数据帧的列值从一个数据帧中删除列

时间:2018-11-20 19:08:00

标签: python pandas dataframe

我有2个数据帧df1和df2,均由8列组成,如下所示:

**df1**
╔══════════════════════════════════════════════════════════╗
║John ║ Mark ║ Jane ║ Natasha ║ Oliver ║ Tony ║ Judd ║ Ron ║
╚══════════════════════════════════════════════════════════╝


**df2**
╔══════════════════════════════════════════════════╗
║True ║True ║False ║True ║False ║False ║False ║True║
╚══════════════════════════════════════════════════╝

df1 的列是不同人的名字,而 df2 的列名是布尔值。我想做的是删除 df1 中所有在 df2 中具有对应的 False 值的列。因此,结果输出应如下所示:

**output**
╔════════════════════════════╗
║John ║ Mark ║ Natasha ║ Ron ║
╚════════════════════════════╝

我正在从csv文件读取两个数据帧。

我们将不胜感激。

注意:实际数据框各有500列。以8为例进行可视化,并显示数据框具有相等的列数

预先感谢

1 个答案:

答案 0 :(得分:2)

您可以使用基本索引。但是,当您解析df2时,列名重复并且被更改,因此需要进行一些清理。

设置

names = ['John', 'Mark', 'Jane', 'Natasha', 'Oliver', 'Tony', 'Judd', 'Ron']
cols = ['TRUE', 'TRUE.1', 'FALSE', 'FALSE.1', 'TRUE.2', 'FALSE.2', 'FALSE.3', 'TRUE.3']

df1 = pd.DataFrame(columns=names)
df2 = pd.DataFrame(columns=cols)

df1.loc[:, df2.columns.str.contains('TRUE')]

Empty DataFrame
Columns: [John, Mark, Oliver, Ron]
Index: []