【问题标题】:pandas dataframe pick all rows with row-count greater than > x熊猫数据框选择行数大于> x的所有行
【发布时间】:2021-07-21 08:27:00
【问题描述】:

如何选择行数 >= 2 的所有行?

我有以下熊猫数据框。

df = pd.DataFrame({"date": ["2000-01-03", "2000-01-04", "2000-01-04", "2000-01-04", "2000-01-04",
                             "2000-01-03", "2000-01-04", "2000-01-05", "2000-01-05", 
                             "2000-01-03", "2000-01-05", "2000-01-05", 
                             "2000-01-04", "2000-01-05"],
                   "sym": ["A", "A", "A", "A", "A" ,"B", "B","B", "B" ,"C", "C", "C", "D", "E"],
                   "val1": [1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2],
                   "val2": [2, 2, 2, 2, 2, 2, 3, 3, 3, 1, 1, 2, 2, 2]
                   
                  })

df

          date sym  val1  val2
0   2000-01-03   A     1     2
1   2000-01-04   A     1     2
2   2000-01-04   A     1     2
3   2000-01-04   A     1     2
4   2000-01-04   A     1     2
5   2000-01-03   B     2     2
6   2000-01-04   B     2     3
7   2000-01-05   B     2     3
8   2000-01-05   B     2     3
9   2000-01-03   C     3     1
10  2000-01-05   C     3     1
11  2000-01-05   C     3     2
12  2000-01-04   D     2     2
13  2000-01-05   E     2     2

我申请了

df.groupby(['date', 'sym'], as_index=False).mean().sort_values(['sym','date'])

为每个 sym 的给定日期平均 val1、val2。

       date   sym  val1 val2
0   2000-01-03  A   1.0 2.0
3   2000-01-04  A   1.0 2.0
1   2000-01-03  B   2.0 2.0
4   2000-01-04  B   2.0 3.0
6   2000-01-05  B   2.0 3.0
2   2000-01-03  C   3.0 1.0
7   2000-01-05  C   3.0 1.5
5   2000-01-04  D   2.0 2.0
8   2000-01-05  E   2.0 2.0

接下来,我需要为“sym”选择行数 >= 2 的所有行。 在此示例中,生成的 df 将是 sym=A,B,C 中的所有行

期望的输出:

       date    sym val1 val2
0   2000-01-03  A   1.0 2.0
3   2000-01-04  A   1.0 2.0
1   2000-01-03  B   2.0 2.0
4   2000-01-04  B   2.0 3.0
6   2000-01-05  B   2.0 3.0
2   2000-01-03  C   3.0 1.0
7   2000-01-05  C   3.0 1.5

我尝试了 groupby、pivot、count 的组合,但没有成功。

【问题讨论】:

  • 首先你说你需要选择 count >= 50 的行,然后最后是 row-count >= 3。好的,假设您需要基于 sym 计数 >= 3 的行,但是 A、C 如何出现在您想要的输出中?你能澄清一下吗?
  • @SomeDude 感谢您指出这一点。我不擅长将实际问题转换为示例代码。 A,B,C 被选中 b'cos row-count >= 2.

标签: python pandas dataframe pivot-table


【解决方案1】:

见:How do I filter a pandas DataFrame based on value counts?


import pandas as pd

df = pd.DataFrame({"date": ["2000-01-03", "2000-01-04",
                            "2000-01-04", "2000-01-04",
                            "2000-01-04", "2000-01-03",
                            "2000-01-04", "2000-01-05",
                            "2000-01-05", "2000-01-03",
                            "2000-01-05", "2000-01-05",
                            "2000-01-04", "2000-01-05"],
                   "sym": ["A", "A", "A", "A", "A", "B",
                           "B", "B", "B", "C", "C", "C",
                           "D", "E"],
                   "val1": [1, 1, 1, 1, 1, 2, 2, 2, 2, 3,
                            3, 3, 2, 2],
                   "val2": [2, 2, 2, 2, 2, 2, 3, 3, 3, 1,
                            1, 2, 2, 2]
                   })

df = df \
    .groupby(['date', 'sym'], as_index=False) \
    .mean() \
    .sort_values(['sym', 'date'])

df = df[df['sym'].map(df['sym'].value_counts()) >= 2]
print(df)

输出:

         date sym  val1  val2
0  2000-01-03   A   1.0   2.0
3  2000-01-04   A   1.0   2.0
1  2000-01-03   B   2.0   2.0
4  2000-01-04   B   2.0   3.0
6  2000-01-05   B   2.0   3.0
2  2000-01-03   C   3.0   1.0
7  2000-01-05   C   3.0   1.5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2022-01-21
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多