pandas 如何打印出一个value_counts后的另一列

xe55xuns  于 9个月前  发布在  其他
关注(0)|答案(4)|浏览(84)

我在学习pandas和python。
我有这样一个框架:

dfsupport = pd.DataFrame({'Date': ['8/12/2020','8/12/2020','13/1/2020','24/5/2020','31/10/2020','11/7/2020','11/7/2020','4/4/2020','1/2/2020'],
                            'Category': ['Table','Chair','Cushion','Table','Chair','Mats','Mats','Large','Large'],
                            'Sales': ['1 table','3chairs','8 cushions','3Tables','12 Chairs','12Mats','4Mats','13 Chairs and 2 Tables', '3 mats, 2 cushions 4@chairs'],
                            'Paid': ['Yes','Yes','Yes','Yes','No','Yes','Yes','No','Yes'],
                            'Amount': ['93.78','$51.99','44.99','38.24','£29.99','29 21 only','18','312.8','63.77' ]
                            })

字符串
其产生:

Date Category                        Sales Paid Amount
0   8/12/2020    Table                      1 table  Yes  93.78
1   8/12/2020    Chair                      3chairs  Yes  51.99
2   13/1/2020  Cushion                   8 cushions  Yes  44.99
3   24/5/2020    Table                      3Tables  Yes  38.24
4  31/10/2020    Chair                    12 Chairs   No  29.99
5   11/7/2020     Mats                       12Mats  Yes  29.21
6   11/7/2020     Mats                        4Mats  Yes     18
7    4/4/2020    Large       13 Chairs and 2 Tables   No  312.8
8    1/2/2020    Large  3 mats, 2 cushions 4@chairs  Yes  63.77


我想找到销售最多的日期,所以我运行:

print("######\n",dfsupport['Date'].value_counts().max())


其给出:

2


我现在要做的是解包2,并找出哪些日期,以及哪些“销售”发生在每个示例中。
我被卡住了,不知道如何打印出这些列。将感谢一些指导。

wmomyfyw

wmomyfyw1#

另一种可能的解决方案,使用pandas.DataFrame.groupbypandas.DataFrame.transformboolean索引:

s = dfsupport.groupby('Date')['Date'].transform(len)
dfsupport[s.eq(s.max())]

字符串
输出量:

Date Category    Sales Paid      Amount
0  8/12/2020    Table  1 table  Yes       93.78
1  8/12/2020    Chair  3chairs  Yes      $51.99
5  11/7/2020     Mats   12Mats  Yes  29 21 only
6  11/7/2020     Mats    4Mats  Yes          18

k3bvogb1

k3bvogb12#

您可以将合并modeisin结合使用,以获取最频繁的日期和布尔索引:

out = dfsupport[dfsupport['Date'].isin(dfsupport['Date'].mode())]

字符串
输出量:

Date Category    Sales Paid      Amount
0  8/12/2020    Table  1 table  Yes       93.78
1  8/12/2020    Chair  3chairs  Yes      $51.99
5  11/7/2020     Mats   12Mats  Yes  29 21 only
6  11/7/2020     Mats    4Mats  Yes          18


中间体:

# dfsupport['Date'].mode()

0    11/7/2020
1    8/12/2020
Name: Date, dtype: object

# dfsupport['Date'].isin(dfsupport['Date'].mode())

0     True
1     True
2    False
3    False
4    False
5     True
6     True
7    False
8    False
Name: Date, dtype: bool

4smxwvx5

4smxwvx53#

value_counts给出列中值的频率:

dfsupport['Date'].value_counts()
8/12/2020     2
11/7/2020     2
13/1/2020     1
24/5/2020     1
31/10/2020    1
4/4/2020      1
1/2/2020      1

字符串
max()给出的最大频率为2
请给予进一步的细节,你要检索或计算从样本数据

gk7wooem

gk7wooem4#

以下是我的做法(我跳过了框架定义):

max_values = dfsupport["Date"].value_counts().loc[lambda x: x == x.max()]
print(max_values)
wanted_values = dfsupport.loc[
    lambda x: x["Date"].isin(max_values.index), :
]
print(wanted_values)

字符串
我没有得到最大值dfsupport["Date"].value_counts().max(),而是使用这个序列作为loc函数的输入,该函数允许您访问一组行和列(official doc)。我将其分配给max_values,以便之后轻松操作。
由于你的最大销售额发生在两个不同的日子,我在isin函数中重用了loc函数。但是,max_values部分让我感兴趣的不是值本身,而是日期值的索引。
这将给出以下输出:

Date
8/12/2020    2
11/7/2020    2
Name: count, dtype: int64
        Date Category    Sales Paid      Amount
0  8/12/2020    Table  1 table  Yes       93.78
1  8/12/2020    Chair  3chairs  Yes      $51.99
5  11/7/2020     Mats   12Mats  Yes  29 21 only
6  11/7/2020     Mats    4Mats  Yes          18

相关问题