gpt4 book ai didi

python - python pandas 中的 R dcast 等价物

转载 作者:太空狗 更新时间:2023-10-29 20:21:31 24 4
gpt4 key购买 nike

我正在尝试在 python 中执行与以下命令等效的操作:

test <- data.frame(convert_me=c('Convert1','Convert2','Convert3'),
values=rnorm(3,45, 12), age_col=c('23','33','44'))
test

library(reshape2)
t <- dcast(test, values ~ convert_me+age_col, length )
t

也就是这个:

convert_me   values     age_col
Convert1 21.71502 23
Convert2 58.35506 33
Convert3 60.41639 44

变成这样:

values     Convert2_33 Convert1_23 Convert3_44
21.71502 0 1 0
58.35506 1 0 0
60.41639 0 0 1

我知道使用虚拟变量我可以获得列的值并转换为列的名称,但是有没有办法像 R 那样轻松地合并它们(组合)?

最佳答案

您可以使用 crosstab为此功能:

In [14]: pd.crosstab(index=df['values'], columns=[df['convert_me'], df['age_col']])
Out[14]:
convert_me Convert1 Convert2 Convert3
age_col 23 33 44
values
21.71502 1 0 0
58.35506 0 1 0
60.41639 0 0 1

pivot_table (使用 len 作为聚合函数,但在这里您必须手动用零 fillna NaN):

In [18]: df.pivot_table(index=['values'], columns=['age_col', 'convert_me'], aggfunc=len).fillna(0)
Out[18]:
age_col 23 33 44
convert_me Convert1 Convert2 Convert3
values
21.71502 1 0 0
58.35506 0 1 0
60.41639 0 0 1

有关这方面的文档,请参阅此处:http://pandas.pydata.org/pandas-docs/stable/reshaping.html#pivot-tables-and-cross-tabulations

pandas 中的大多数函数将返回多级(分层)索引,在本例中为列。如果你想像在 R 中那样将其“融合”到一个级别,你可以这样做:

In [15]: df_cross = pd.crosstab(index=df['values'], columns=[df['convert_me'], df['age_col']])

In [16]: df_cross.columns = ["{0}_{1}".format(l1, l2) for l1, l2 in df_cross.columns]

In [17]: df_cross
Out[17]:
Convert1_23 Convert2_33 Convert3_44
values
21.71502 1 0 0
58.35506 0 1 0
60.41639 0 0 1

关于python - python pandas 中的 R dcast 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25618650/

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