gpt4 book ai didi

python - 如何将列转换为矩阵、按日期过滤并对索引排序?

转载 作者:行者123 更新时间:2023-12-01 06:42:37 24 4
gpt4 key购买 nike

我是Python新手,正在尝试学习。我有两列数据,我想用它们来创建矩阵。我正在处理大量数据,但我创建了一个示例集如下:

import pandas as pd

data = [
['10/31/2019','12345','0','1'],['10/31/2019','54321','1','0'],['10/31/2019','43215','2','2'],
['10/31/2019','12346','0','1'],['10/31/2019','54322','1','0'],['9/28/2019','53215','3','3'],
['9/28/2019','73215','4','4'],['9/28/2019','13215','5','5'],['9/28/2019','42215','6','6'],
['9/28/2019','83215','7','7'],['9/28/2019','93215','8','8'],['9/28/2019','12215','9','9'],
['9/28/2019','73212','10','10'],['8/31/2019','22215','5','5'],['8/31/2019','56215','6','6']
]

df = pd.DataFrame(data, columns = ['Date','AccountNo','BalanceTier','PriorMonthBalanceTier'])
df

这给了我以下输出:

    Date    AccountNo BalanceTier   PriorMonthBalanceTier   
0 10/31/2019 12345 0 1
1 10/31/2019 54321 1 0
2 10/31/2019 43215 2 2
3 10/31/2019 12346 0 1
4 10/31/2019 54322 1 0
5 9/28/2019 53215 3 3
6 9/28/2019 73215 4 4
7 9/28/2019 13215 5 5
8 9/28/2019 42215 6 6
9 9/28/2019 83215 7 7
10 9/28/2019 93215 8 8
11 9/28/2019 12215 9 9
12 9/28/2019 73212 10 10
13 8/31/2019 22215 5 5
14 8/31/2019 56215 6 6

然后,我尝试从这些数据中获取汇总矩阵,其中列是'BalanceTier',行是'PriorMonthBalanceTier'。每个矩阵都针对特定日期。例如,如果我按 10/31 进行筛选,汇总矩阵将显示帐户如何从 9/30 (PriorMonthBalanceTier) 的一个余额层转换到 10/31 (BalanceTier) 的另一个余额层。我尝试了下面的代码,但它给了我这个错误:

TypeError: filter function returned a DataFrame, but expected a scalar bool

matrix = df.groupby('Date').filter(lambda x: x == '10/31/2019').groupby(['PriorMonthBalanceTier','BalanceTier']).size().unstack().fillna(0)
matrix

虽然结果没有意义,但代码确实在没有过滤器的情况下运行,但列/行未排序。例如,行/列的顺序是 0, 1, 10,2,3,4...我希望它是 0,1,2,3,4,...,10。由于我才刚刚开始,因此非常感谢任何帮助!

2019 年 10 月 31 日的输出应为: output image

最佳答案

你想到了吗?

df.groupby('Date') \
.filter(lambda grp: grp.Date.iloc[0]=="10/31/2019") \
.groupby(['PriorMonthBalanceTier','BalanceTier'] \
.size().unstack().fillna(0).astype(int)

BalanceTier 0 1 2
PriorMonthBalanceTier
0 0 2 0
1 2 0 0
2 0 0 1

编辑:所以更简单:

df[df.Date.eq("10/31/2019")] \ 
.groupby(['PriorMonthBalanceTier','BalanceTier']) \
.size().unstack().fillna(0).astype(int)

关于python - 如何将列转换为矩阵、按日期过滤并对索引排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com