我的数据框看起来像这样.

# initialize list of lists
data = [[1998, 1998,2002,2003], [2001, 1999,1993,2003], [1998, 1999,2003,1994], [1998,1997,2003,1993], [1999,2001,1996, 1999]]
     
df = pd.DataFrame(data, columns = ['A', 'B', 'C', 'D'])

我想计算每个日期发生的次数,单位为%.这样数据框看起来像这样:

    1997    1998    1999
A   20%     80%     100%
B   30%     10%     0%
C   70%     10%     0%

我试着一组一组地使用Pandas .

推荐答案

逻辑并不完全清楚(因为看起来提供的输出不是与提供的输入对应的真实输出),但以下是一些方法:

using crosstab

每年的百分比

df2 = df.melt(value_name='year')

df2 = pd.crosstab(df2['variable'], df2['year'], normalize='columns').mul(100)

# or
# df2 = pd.crosstab(df2['variable'], df2['year'])
# df2.div(df2.sum()).mul(100)

输出:

year      1993   1994   1996   1997  1998  1999  2001   2002  2003
variable                                                          
A          0.0    0.0    0.0    0.0  75.0  25.0  50.0    0.0   0.0
B          0.0    0.0    0.0  100.0  25.0  50.0  50.0    0.0   0.0
C         50.0    0.0  100.0    0.0   0.0   0.0   0.0  100.0  50.0
D         50.0  100.0    0.0    0.0   0.0  25.0   0.0    0.0  50.0

每个变量的百分比

df2 = df.melt(value_name='year')
pd.crosstab(df2['variable'], df2['year'], normalize='index').mul(100)

# or
# df2 = pd.crosstab(df2['variable'], df2['year'])
# df2.div(df2.sum(1), axis=0).mul(100)

输出:

year      1993  1994  1996  1997  1998  1999  2001  2002  2003
variable                                                      
A          0.0   0.0   0.0   0.0  60.0  20.0  20.0   0.0   0.0
B          0.0   0.0   0.0  20.0  20.0  40.0  20.0   0.0   0.0
C         20.0   0.0  20.0   0.0   0.0   0.0   0.0  20.0  40.0
D         20.0  20.0   0.0   0.0   0.0  20.0   0.0   0.0  40.0

using groupby

(df.stack()
 .groupby(level=1)
 .apply(lambda s: s.value_counts(normalize=True))
 .unstack(fill_value=0)
 .mul(100)
 )

输出:

   1993  1994  1996  1997  1998  1999  2001  2002  2003
A   0.0   0.0   0.0   0.0  60.0  20.0  20.0   0.0   0.0
B   0.0   0.0   0.0  20.0  20.0  40.0  20.0   0.0   0.0
C  20.0   0.0  20.0   0.0   0.0   0.0   0.0  20.0  40.0
D  20.0  20.0   0.0   0.0   0.0  20.0   0.0   0.0  40.0

Python相关问答推荐

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

更改键盘按钮进入'

如何在polars(pythonapi)中解构嵌套 struct ?

numpy卷积与有效

在含噪声的3D点网格中识别4连通点模式

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

如何在TensorFlow中分类多个类

(Python/Pandas)基于列中非缺失值的子集DataFrame

需要帮助使用Python中的Google的People API更新联系人的多个字段'

当输入是字典时,`pandas. concat`如何工作?

遍历列表列表,然后创建数据帧

使用xlsxWriter在EXCEL中为数据帧的各行上色

.awk文件可以使用子进程执行吗?

在Pandas 中以十六进制显示/打印列?

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?

如何在Python中画一个只能在对角线内裁剪的圆?

是否从Python调用SHGetKnownFolderPath?

如何强制SqlalChemy指向与连接字符串的默认架构不同的架构

如何使用aiohttp获取图像并直接处理它而不保存它?