pandas 计数 Dataframe 中的随机零

qpgpyjmq  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(101)

我有一个大数据框架。下面是几个示例,如-
DF -
| 卖家|2002年1月|2002年2月|2002年3月|2002年4月|02年5月|2002年6月|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 卖方A|二|0|十一|十二岁|十三|17个|
| 卖方B|十二岁|0|三十|0|四十|四十五|
| 卖方C|一百|一百五十|0| 0|二百七十五|三百|
| 卖家D| 0| 0| 0| 0| 0| 0|
| 卖方E| 10个|二十二|四十|0| 0| 0|
| SellerF|一百|十二岁|十一|二十二|0| 0|
| SellerG| 10个|七十个|一百|一百二十一|二十一|二十二|
| SellerH|七|1| 1| 1| 1|二十一|
| 卖方I| 0| 0| 0| 0| 0| 0|
我需要以下卖家名单-

始终为0-卖家数量= 2 ;例如[卖方D,卖方I]
最近3天显示0-卖家数量= 1 ;例如[卖方E]
有时为0-卖家数量= 3 ;例如- [卖方A、卖方B、卖方C]
从不为0-卖家数量= 2 ; eg - [卖方G,卖方H]

f3temu5u

f3temu5u1#

可以使用numpy.select

tmp = df.set_index('Seller').eq(0)

df['Seller'].set_axis(
    np.select([tmp.all(axis=1), tmp.iloc[:, -3:].all(axis=1), tmp.any(axis=1)],
              ['Always 0', '0 in last 3 dates', 'Sometimes 0'], 'Never 0')
).groupby(level=0).count()

或者:

pd.Series(np.select([tmp.all(axis=1), tmp.iloc[:, -3:].all(axis=1), tmp.any(axis=1)],
          ['Always 0', '0 in last 3 dates', 'Sometimes 0'], 'Never 0')).value_counts()

输出:

0 in last 3 dates    1
Always 0             2
Never 0              2
Sometimes 0          4
Name: Seller, dtype: int64

如果你想要列表:

df['Seller'].set_axis(
    np.select([tmp.all(axis=1), tmp.iloc[:, -3:].all(axis=1), tmp.any(axis=1)],
              ['Always 0', '0 in last 3 dates', 'Sometimes 0'], 'Never 0')
).groupby(level=0).agg(list)

输出:

0 in last 3 dates                               [SellerE]
Always 0                               [SellerD, SellerI]
Never 0                                [SellerG, SellerH]
Sometimes 0          [SellerA, SellerB, SellerC, SellerF]
Name: Seller, dtype: object

相关问题