【问题标题】:Group seperated counting values in a pandas dataframe在熊猫数据框中对单独的计数值进行分组
【发布时间】:2020-03-11 21:50:39
【问题描述】:

我有关注 df

     A   B
0    1   10
1    2   20
2    NaN 5
3    3   1
4    NaN 2
5    NaN 3
6    1   10
7    2   50
8    Nan 80
9    3   5

由 1-3 的重复序列组成,由可变数量的 NaN 分隔。我想按 1-3 中的每个序列进行分组,并获得这些序列中 B 列的最小值。

所需的输出类似于:

     B_min
0    1
6    5

先谢谢了

德拉吉

【问题讨论】:

  • 发布你编写的代码

标签: python pandas


【解决方案1】:

想法是首先通过DataFrame.dropna 删除缺失值的行,然后使用GroupBy.cummin by helper Series 通过比较A 创建等于Series.eqSeries.cumsum,最后将数据清理到一列@ 987654331@:

df = (df.dropna(subset=['A'])
       .groupby(df['A'].eq(1).cumsum())['B']
       .min()
       .reset_index(drop=True)
       .to_frame(name='B_min'))
print (df)
   B_min
0      1
1      5

【讨论】:

  • 谢谢!我也开始玩 dropna,但我缺乏像 .eq() 这样的辅助函数的知识。非常感谢!
【解决方案2】:

您只需df.groupby() 并申请min()。这是你所期待的吗?

df.groupby('A')['B'].min()

输出:

A
1      10
2      20
3       1
Nan    80

如果您不想在您的群组中使用 NaNs,您可以使用 df.dropna() 删除它们

df.dropna().groupby('A')['B'].min()

【讨论】:

  • 不幸的是,它不是所需的输出。无论如何,谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 2020-06-22
  • 1970-01-01
  • 2021-11-02
  • 2018-04-20
  • 1970-01-01
  • 2017-12-13
  • 2018-02-07
相关资源
最近更新 更多