Python 每年统计熊猫数据帧中的类似字符串值
拥有下面的数据集。我想数一数某一年出现的字符串。事实上,我有一个大得多的数据框架多年。如何组合groupby方法并计算不同的字符串值Python 每年统计熊猫数据帧中的类似字符串值,python,pandas,pivot-table,Python,Pandas,Pivot Table,拥有下面的数据集。我想数一数某一年出现的字符串。事实上,我有一个大得多的数据框架多年。如何组合groupby方法并计算不同的字符串值 df=pd.DataFrame(数据={'col1':['A','B','D','A','col2':['B','C','E','E','E','E'],'col3':['C','D','','','col4':['D','E','','A',索引=['01-01-2000','02-01-2001','02-01-2001']) 预期结果:
df=pd.DataFrame(数据={'col1':['A','B','D','A','col2':['B','C','E','E','E','E'],'col3':['C','D','','','col4':['D','E','','A',索引=['01-01-2000','02-01-2001','02-01-2001'])
预期结果:
count
A 2000 1
A 2001 1
B 2000 2
B 2001 0
C 2000 2
C 2001 0
D 2000 2
D 2001 1
E 2000 1
E 2001 2
您可以在中创建新列
year
,然后按重塑、按删除空字符串、按获取计数、按添加缺少的类别和上次使用:
首先,让我们用空值替换空单元格(例如,
np.nan
),并将索引设置为:
(我还更改了代码以适合您问题中的示例)
要获得结果,请执行以下操作:
result = df.apply(lambda row: row.value_counts(), axis=1).resample('1Y').sum().stack().reorder_levels([1, 0]).sort_index()
这将产生:
A 2000-12-31 1.0
2001-12-31 1.0
B 2000-12-31 2.0
2001-12-31 0.0
C 2000-12-31 2.0
2001-12-31 0.0
D 2000-12-31 2.0
2001-12-31 1.0
E 2000-12-31 1.0
2001-12-31 2.0
让我们把它分解一下:
将数据帧转换为列中的“A”到“E”,以及单元格中的出现次数:df.apply(lambda row:row.value_counts(),axis=1)
A B C D E 2000-01-01 1.0 1.0 1.0 1.0 NaN 2000-02-01 NaN 1.0 1.0 1.0 1.0 2001-01-01 NaN NaN NaN 1.0 1.0 2001-02-01 1.0 NaN NaN NaN 1.0
正在使用,这只是一种很好地处理日期时间索引的幻想,可以按年份对事件进行求和。它产生:.resample('1Y').sum()
A B C D E 2000-12-31 1.0 2.0 2.0 2.0 1.0 2001-12-31 1.0 0.0 0.0 1.0 2.0
- ,和sort_index只是将结果转换为所需的格式(好吧,几乎……注意,它显示的不是一年,而是该年的最后一天)
A 2000-12-31 1.0
2001-12-31 1.0
B 2000-12-31 2.0
2001-12-31 0.0
C 2000-12-31 2.0
2001-12-31 0.0
D 2000-12-31 2.0
2001-12-31 1.0
E 2000-12-31 1.0
2001-12-31 2.0
A B C D E
2000-01-01 1.0 1.0 1.0 1.0 NaN
2000-02-01 NaN 1.0 1.0 1.0 1.0
2001-01-01 NaN NaN NaN 1.0 1.0
2001-02-01 1.0 NaN NaN NaN 1.0
A B C D E
2000-12-31 1.0 2.0 2.0 2.0 1.0
2001-12-31 1.0 0.0 0.0 1.0 2.0