python - 如何在熊猫中并排附加两个数据框列
问题描述
我有一个 df ,它包含所有数字列。我想cumprod
为每一列查找并将每列结果的结果并排附加。这个怎么做。为了方便比较,我想要这个并排的结果。
例如:
我的输入df:
col1 col2 col3
0 1.000000 1.000000 1.000000
1 0.998766 0.999490 0.998892
2 0.997779 0.999081 0.998005
3 0.996299 0.998469 0.996676
4 0.994573 0.997754 0.995126
5 0.993095 0.997140 0.993797
6 0.991125 0.996322 0.992027
7 0.989648 0.995708 0.990699
8 0.988171 0.995094 0.989372
9 0.986695 0.994480 0.988045
10 0.984729 0.993660 0.986276
11 0.983010 0.992943 0.984730
df的暨产品:
col1 col2 col3
0 1.000000 1.000000 1.000000
1 0.998766 0.999490 0.998892
2 0.996547 0.998572 0.996899
3 0.992859 0.997043 0.993585
4 0.987471 0.994803 0.988742
5 0.980653 0.991958 0.982609
6 0.971949 0.988310 0.974775
7 0.961887 0.984069 0.965708
8 0.950509 0.979241 0.955444
9 0.937863 0.973836 0.944022
10 0.923541 0.967662 0.931066
11 0.907850 0.960833 0.916849
预期输出:
col1 col1 col2 col2 col3 col3
0 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
1 0.998766 0.998766 0.999490 0.999490 0.998892 0.998892
2 0.997779 0.996547 0.999081 0.998572 0.998005 0.996899
3 0.996299 0.992859 0.998469 0.997043 0.996676 0.993585
4 0.994573 0.987471 0.997754 0.994803 0.995126 0.988742
5 0.993095 0.980653 0.997140 0.991958 0.993797 0.982609
6 0.991125 0.971949 0.996322 0.988310 0.992027 0.974775
7 0.989648 0.961887 0.995708 0.984069 0.990699 0.965708
8 0.988171 0.950509 0.995094 0.979241 0.989372 0.955444
9 0.986695 0.937863 0.994480 0.973836 0.988045 0.944022
10 0.984729 0.923541 0.993660 0.967662 0.986276 0.931066
11 0.983010 0.907850 0.992943 0.960833 0.984730 0.916849
注意:如果我得到cum_of_coln
而不是coln
在列名中更受欢迎
我使用的获取 cum_prod 的代码,
print df
print df.cumprod()
解决方案
计算cumprod
,然后使用cytoolz
和交错列标题:
from toolz import interleave
df2 = df.cumprod().add_prefix('cum_of_')
df3 = pd.concat([df, df2], axis=1)[list(interleave([df, df2]))]
或者,您可以使用sorted
:
df2 = df.cumprod().add_prefix('cum_of_')
df3 = pd.concat([df, df2], axis=1)
df3 = df3[sorted(df3, key=lambda x: x.split('_')[-1])]
第三种选择是在排序后改变列标题。应该相当有效率。
df3 = pd.concat([df, df.cumprod()], axis=1).sort_index(axis=1)
c = df3.columns.values
c[1::2] = 'cum_of_' + c[1::2]
df3.columns = c
df3.head()
col1 cum_of_col1 col2 cum_of_col2 col3 cum_of_col3
0 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
1 0.998766 0.998766 0.999490 0.999490 0.998892 0.998892
2 0.997779 0.996548 0.999081 0.998571 0.998005 0.996899
3 0.996299 0.992860 0.998469 0.997043 0.996676 0.993586
4 0.994573 0.987471 0.997754 0.994803 0.995126 0.988743
推荐阅读
- swift - 在 macCatalyst 中设置 tintColor
- java - 当我使用 .xlxs 格式时,错误就像这样无效的行号(65536)超出了允许范围(0..65535)
- flutter - 实例化``` typedef Widget SuccessCallback时如何定义其类型
(T数据);``` - reactjs - 出现未经授权的错误:需要完全身份验证才能访问此资源
- c# - Xamarin Forms ListView,当TranslateTo动画被其他项目隐藏时
- python - 使用 jenkins shell 调用 python 问题 sshpass 命令未找到
- arrays - 在 Dart 中合并子列表
- python-3.x - 如何找到熊猫列中连续零的最大计数?
- vba - 如果我用不同的名称保存演示文稿,功能区菜单宏会失败
- kdb - KDB+:如何检索符合特定逻辑的给定行之前和之后的行?