Pandas - 使用值列表创建较小的帧

时间:2016-12-21 17:14:27

标签: python pandas

我有一个在大型pandas数据帧中找到的值列表:

df

示例DataFrame column x 0 1 3 1 4 6 2 5 8 3 6 19 4 8 21 5 12 97 6 54 102 如下:

df_new = df[df['column'] is in value_list] # pseudo code

我想仅使用以下值创建数据框的子集:

#include <iostream>

// Define two genetic macros
#define SECOND_ARG(A,B,...) B
#define CONCAT2(A,B) A ## B

// If a macro is detected, add an arg, so the second one will be 1.
#define DETECT_EXIST_TRUE ~,1

// DETECT_EXIST merely concats a converted macro to the end of DETECT_EXIST_TRUE.
// If empty, DETECT_EXIST_TRUE converts fine.  If not 0 remains second argument.
#define DETECT_EXIST(X) DETECT_EXIST_IMPL(CONCAT2(DETECT_EXIST_TRUE,X), 0, ~)
#define DETECT_EXIST_IMPL(...) SECOND_ARG(__VA_ARGS__)

// We will create MY_DEFINE, but not MY_DEFINE2
#define MY_DEFINE

int main()
{
  // We can now use DETECT_EXIST to detect defines.
  std::cout << "MY_DEFINE = " << DETECT_EXIST(MY_DEFINE) << std::endl;
  std::cout << "MY_DEFINE2 = " << DETECT_EXIST(MY_DEFINE2) << std::endl;
}

这可能吗?

2 个答案:

答案 0 :(得分:3)

您可能正在寻找isin操作。

In [60]: df[df['column'].isin(value_list)]
Out[60]:
   column    x
0       1    3
1       4    6
2       5    8
3       6   19
6      54  102

此外,您可以使用query之类的

In [63]: df.query('column in @value_list')
Out[63]:
   column    x
0       1    3
1       4    6
2       5    8
3       6   19
6      54  102

答案 1 :(得分:1)

你错过了一个for循环:

df_new = [df[elem]['column'] for elem in df if df[elem]['column'] in value_list]