【问题标题】:Get dataframe columns from a list using isin使用 isin 从列表中获取数据框列
【发布时间】:2017-02-11 04:18:03
【问题描述】:

我有一个数据框df1,我有一个列表,其中包含df1 的几列的名称。

df1:
User_id  month  day  Age   year    CVI    ZIP    sex  wgt
0           1    7   16    1977     2      NA    M    NaN
1           2    7   16    1977     3      NA    M    NaN
2           3    7   16    1977     2      DM    F    NaN
3           4    7   16    1977     7      DM    M    NaN
4           5    7   16    1977     3      DM    M    NaN
...        ...    ...  ...   ...   ...     ...  ...  ...
35544      35545   12   31  2002    15      AH  NaN  NaN
35545      35546   12   31  2002    15      AH  NaN  NaN
35546      35547   12   31  2002    10      RM    F   14
35547      35548   12   31  2002     7      DO    M   51
35548      35549   12   31  2002     5     NaN  NaN  NaN

 list= [u"User_id", u"day", u"ZIP", u"sex"]

我想创建一个新的数据框df2,其中将包含列表中的所有列,以及一个数据框df3,其中包含不在列表中的列。

Here我发现我需要做的:

df2=df1[df1[df1.columns[1]].isin(list)]

但结果我得到:

Empty DataFrame
Columns: []
Index: []
[0 rows x 9 columns]

我做错了什么,我怎样才能得到需要的结果?如果它应该是 4,为什么要“9 列”?

【问题讨论】:

  • 抱歉,您是在第一种情况下关注df2=df1[list] 吗?对于其他你可以做df3=df1[df1.columns[~df1.columns.isin(list)]]

标签: python list pandas conditional-statements multiple-columns


【解决方案1】:

你可以试试:

df2 = df1[list] # it does a projection on the columns contained in the list
df3 = df1[[col for col in df1.columns if col not in list]]

【讨论】:

  • 你觉得df3 = df1[[col for col in df1.columns if col not in list]] 吗?
【解决方案2】:

Index.difference 的解决方案:

L = [u"User_id", u"day", u"ZIP", u"sex"]

df2 = df1[L] 
df3 = df1[df1.columns.difference(df2.columns)]
print (df2)
   User_id  day  ZIP sex
0        0    7  NaN   M
1        1    7  NaN   M
2        2    7   DM   F
3        3    7   DM   M
4        4    7   DM   M

print (df3)
   Age  CVI  month  wgt  year
0   16    2      1  NaN  1977
1   16    3      2  NaN  1977
2   16    2      3  NaN  1977
3   16    7      4  NaN  1977
4   16    3      5  NaN  1977

或者:

df2 = df1[L] 
df3 = df1[df1.columns.difference(pd.Index(L))]
print (df2)
   User_id  day  ZIP sex
0        0    7  NaN   M
1        1    7  NaN   M
2        2    7   DM   F
3        3    7   DM   M
4        4    7   DM   M

print (df3)
   Age  CVI  month  wgt  year
0   16    2      1  NaN  1977
1   16    3      2  NaN  1977
2   16    2      3  NaN  1977
3   16    7      4  NaN  1977
4   16    3      5  NaN  1977

【讨论】:

    【解决方案3】:

    永远不要将列表命名为“列表”

    my_list= [u"User_id", u"day", u"ZIP", u"sex"]
    df2 = df1[df1.keys()[df1.keys().isin(my_list)]]
    

    【讨论】:

      【解决方案4】:

      永远不要将列表命名为“列表”

      my_list= [u"User_id", u"day", u"ZIP", u"sex"]
      df2 = df1[df1.keys()[df1.keys().isin(my_list)]]
      

      或

      df2 = df1[df1.columns[df1.columns.isin(my_list)]]
      

      【讨论】:

        猜你喜欢
        • 2015-04-03
        • 1970-01-01
        • 1970-01-01
        • 2021-06-27
        • 2021-03-20
        • 1970-01-01
        • 2022-10-13
        • 2014-04-15
        相关资源
        最近更新 更多