簡體   English   中英

將現有列作為移動平均值復制到數據框

[英]Copying existing columns as moving averages to a dataframe

我想我想多了 - 我試圖復制現有的熊貓數據框列和值並制作滾動平均值 - 我不想覆蓋原始數據。 我正在迭代列,獲取列和值,將滾動 7 天 ma 作為新列,后綴為_ma作為原始副本的副本。 我想將現有數據與 7 天 MA 進行比較,並查看數據來自 7 天 MA 的標准開發數量 - 我可以弄清楚 - 我只是想將 MA 數據保存為新數據框。

我有

for column in original_data[ma_columns]:

    ma_df = pd.DataFrame(original_data[ma_columns].rolling(window=7).mean(), columns = str(column)+'_ma')

並得到錯誤: Index(...) must be called with a collection of some kind, 'Carrier_AcctPswd_ma' was passed

但如果我迭代

for column in original_data[ma_columns]:

    print('Colunm Name : ', str(column)+'_ma')
    print('Contents : ', original_data[ma_columns].rolling(window=7).mean())

我得到了我需要的數據: 移動平均數據框

我的問題只是將它保存為一個新的數據框,我可以將它連接到舊的,然后進行分析。

編輯

我現在已經能夠制作一堆數據框,但我想將它們連接在一起,這就是問題所在:

for column in original_data[ma_columns]:

    MA_data = pd.DataFrame(original_data[column].rolling(window=7).mean())
    for i in MA_data:
        new = pd.concat(i)
        print(i)
<ipython-input-75-7c5e5fa775b3> in <module>
     17 #     print(type(MA_data))
     18     for i in MA_data:
---> 19         new = pd.concat(i)
     20         print(i)
     21 

~\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py in concat(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy)
    279         verify_integrity=verify_integrity,
    280         copy=copy,
--> 281         sort=sort,
    282     )
    283 

~\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py in __init__(self, objs, axis, join, keys, levels, names, ignore_index, verify_integrity, copy, sort)
    307                 "first argument must be an iterable of pandas "
    308                 "objects, you passed an object of type "
--> 309                 '"{name}"'.format(name=type(objs).__name__)
    310             )
    311 

TypeError: first argument must be an iterable of pandas objects, you passed an object of type "str"

您應該遍歷列名並將生成的 Pandas 系列分配為新命名的列,例如:

import pandas as pd

original_data = pd.DataFrame({'A': range(100), 'B': range(100, 200)})

ma_columns = ['A', 'B']

for column in ma_columns:
    new_column = column + '_ma'
    original_data[new_column] = pd.DataFrame(original_data[column].rolling(window=7).mean())

print(original_data)

輸出數據幀:

    A    B  A_ma   B_ma
0    0  100   NaN    NaN
1    1  101   NaN    NaN
2    2  102   NaN    NaN
3    3  103   NaN    NaN
4    4  104   NaN    NaN
..  ..  ...   ...    ...
95  95  195  92.0  192.0
96  96  196  93.0  193.0
97  97  197  94.0  194.0
98  98  198  95.0  195.0
99  99  199  96.0  196.0

[100 rows x 4 columns]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM