从“熊猫”列中创建具有相似日期的列表

问题描述

我有一个包含日期和类别的熊猫数据框。对于相同的日期,可能有多个类别。 df示例:

+------------+----------+
|    Date    | Category |
+------------+----------+
| 2020-01-02 | A        |
| 2020-01-02 | B        |
| 2020-01-02 | C        |
| 2020-01-02 | D        |
| 2020-02-20 | E        |
| 2020-02-20 | F        |
| 2020-02-20 | G        |
+------------+----------+

我想创建一个函数来为日期提供一个输出列表,为类别给另一个输出列表。

所需的输出:

date_list = [['2020-01-02'],['2020-02-20']]
category_list = [['A','B','C','D',],['E','F','G']]

请注意,可以有两个以上不同的日期,然后输出将相应地更改。

获得这样的输出的目的是,我必须将列表传递给API,该API会给我价格 每个类别。我只需创建一个列表即可

date_list = df.Date.tolist()

category_list = df.Category.tolist()

传递此类列表将对API进行多次调用,并且会花费很长时间。如果同一日期有相似的类别,那么我将传递一个日期列表和该日期的类别列表。看起来像

zipped = zip(category_list,date_list)
for i,j in zip:
    result = get_data(i,j)

解决方法

首先按DataFrame.groupbyGroupBy.agg按组创建列表:

s = df.groupby('Date')['Category'].agg(list)
print (s)
Date
2020-01-02    [A,B,C,D]
2020-02-20       [E,F,G]
Name: Category,dtype: object

#for one element lists use lsit comprehension
date_list = [[x] for x in s.index]
category_list = s.tolist()

print (date_list)
[['2020-01-02'],['2020-02-20']]
print (category_list)
[['A','B','C','D'],['E','F','G']]

如果可能需要传递给函数,则可以通过Series s通过Series.items循环:

s = df.groupby('Date')['Category'].agg(list)

for i,j in s.items():
    print ([i],j)
['2020-01-02'] ['A','D']
['2020-02-20'] ['E','G']

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...