将一列浮点数转换为累积百分比

Posted

技术标签:

【中文标题】将一列浮点数转换为累积百分比【英文标题】:Converting a column of floats into cumulative percentages 【发布时间】:2020-12-30 08:57:54 【问题描述】:

Screenshot

嘿,我有一列'close'中的浮点数需要转换为累积百分比并将其存储在'cum_p'中。

我得到了这个脚本来帮助我,但我搞砸了一两步:

import os
import sys
import csv


def adjust_cryptors_file(source, /, values, close):
    with open(source) as f:
        data = [row for row in csv.reader(f)][1:]

    agg_data = []

    ix = 0
    total = 0
    while ix < len(data):
        # value to add to the running total
        row = data[ix]

        # Column 20 / Index 19
        v = float(row[values])

        total += v

        # percentage of running total
        p = (total / 3797.14) * 100

        closed = row[close]

        # add to new list of data
        agg_data.append([v, p, closed])

        # increment index counter
        ix += 1

    agg_data.insert(0, ['timestamp', 'close', 'cum_p'])

    parent = os.path.dirname(source)
    dest = os.path.join(parent, 'modified.data')

    with open('modified.csv', 'w') as f:
        writer = csv.writer(f)
        writer.writerows(agg_data)

    print(f"Your new modified data file: dest")


if __name__ == '__main__':
    # Enter your CSV file here
    source = 'BTCUSDT-1d-data.csv'
    column_of_timestamp = 1
    column_of_close = 5

    adjust_cryptors_file(source, values=column_of_timestamp, close=column_of_close)

我非常感谢一些帮助或指点 :) 第一个值是 0%,第二个值是 'close' 中第一个和第二个值的百分比差异。

希望任何人都可以帮助我。

【问题讨论】:

您愿意分享您正在使用的 .csv 文件吗?我想帮助购买希望确保格式符合您正在使用的格式,这样我就不会得到可能不兼容的解决方案。 【参考方案1】:

试试这个解决方案:

df["cum_p"] = pd.Series.cumsum(df.close)/df.close.sum()*100

它给出以下输出:

【讨论】:

【参考方案2】:

由于您将每一行保存在agg_data 列表中,因此我们可以使用该列表访问close 的前一行数据。根据您的指示,我已将其添加为有条件的判断:

# percentage of running total
        p = (total / 3797.14) * 100

        # new conditional statement to deal with the 'cum_p' column
        if ix == 0:
            closed = 0
        else:
            closed = ((p - agg_data[ix-1][1])/agg_data[ix-1][1]) * 100

        # add to new list of data
        agg_data.append([v, p, closed])

这是我现在为modified.csv 中的cum_p 列获得的示例输出。

编辑:我使用的是 close 文件中的 modified.csv 中的值。如果您指的是原始BTCUSDT-1d-data.csv 文件中的close,请告诉我。

【讨论】:

【参考方案3】:

解决了这个问题

import pandas as pd

如果 name == 'ma​​in': source = 'BTCUSDT-1d-data.csv'

# create dataframe from csv file
df = pd.read_csv(source)

# calculate the cum_pnl
daily_close = df['close']
daily_returns = pd.Series(daily_close).pct_change(1)
cum_pnl = daily_returns.cumsum()

# add cum_pnl column
df['cum_pnl'] = cum_pnl

# filter to only columns that we want:
df = df[['timestamp', 'close', 'cum_pnl']]

# export it as csv again
df.to_csv('btcdailychange.csv')

这给了我每一行的个人百分比变化 然后我简单地创建了一个新列 ['sum'] 并:

df['sum'] = df["cum_pnl"].cumsum()

感谢大家的回复!

【讨论】:

以上是关于将一列浮点数转换为累积百分比的主要内容,如果未能解决你的问题,请参考以下文章

如何将一列的运行总计添加到 Access 查询?

oracle 怎么求累计百分比

为啥 Python 返回 0.0 进行除法? [复制]

谈谈“累积百分声级”

谈谈“累积百分声级”

谈谈“累积百分声级”