亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據其他列的輸入在數據框中創建列

根據其他列的輸入在數據框中創建列

慕田峪9158850 2023-03-01 15:29:16
我想在下面的 df 上創建一個新列,一旦 C>55 天高點返回 1。每個后續行也將顯示 1,即使 C<55 天高點直到 C<20 天低點。我該怎么做?提前致謝df = pd.DataFrame([    ['2020-01-01 01:01:00', 7147.69, 7163.32, 7147.69],    ['2020-01-01 01:02:00', 7158.31, 7163.32, 7147.69],    ['2020-01-01 01:03:00', 7157.08, 7163.32, 7147.69],    ['2020-01-01 01:04:00', 7157.01, 7163.32, 7147.69],    ['2020-01-01 01:05:00', 7159.85, 7163.32, 7147.69],    ['2020-01-01 01:06:00', 7161.29, 7163.32, 7147.69],    ['2020-01-01 01:07:00', 7161.29, 7163.32, 7147.69],    ['2020-01-01 01:08:00', 7161.28, 7162.03, 7147.69],    ['2020-01-01 01:09:00', 7161.29, 7162.03, 7147.69],], columns=['date', 'C', '55 day high', '20 day low'])數據框:                               C  55 day high  20 day lowdate                                                 2020-01-01 01:01:00  7147.69      7163.32     7147.692020-01-01 01:02:00  7158.31      7163.32     7147.692020-01-01 01:03:00  7157.08      7163.32     7147.692020-01-01 01:04:00  7157.01      7163.32     7147.692020-01-01 01:05:00  7159.85      7163.32     7147.692020-01-01 01:06:00  7161.29      7163.32     7147.692020-01-01 01:07:00  7161.29      7163.32     7147.692020-01-01 01:08:00  7161.28      7162.03     7147.692020-01-01 01:09:00  7161.29      7162.03     7147.69
查看完整描述

2 回答

?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

我想不出這樣做的方法apply(),但您可以使用iterrows()條件循環遍歷行,輸出結果列表,然后將其放入新的數據框列中。請注意,我已經更改了課程數據以模擬您描述的開始和停止條件:


import pandas as pd 

df = pd.DataFrame([

    ['2020-01-01 01:01:00', 7147.69, 7163.32, 7147.69],

    ['2020-01-01 01:02:00', 7158.31, 7163.32, 7147.69],

    ['2020-01-01 01:03:00', 7164.08, 7163.32, 7147.69],

    ['2020-01-01 01:04:00', 7157.01, 7163.32, 7147.69],

    ['2020-01-01 01:05:00', 7159.85, 7163.32, 7147.69],

    ['2020-01-01 01:06:00', 7161.29, 7163.32, 7147.69],

    ['2020-01-01 01:07:00', 7161.29, 7163.32, 7147.69],

    ['2020-01-01 01:08:00', 7145.28, 7162.03, 7147.69],

    ['2020-01-01 01:09:00', 7161.29, 7162.03, 7147.69],

], columns=['date', 'C', '55 day high', '20 day low'])


new_col = []

state = 0

for row in df.iterrows():

    if row[1]['C'] > row[1]['55 day high']:

        state = 1

    if row[1]['C'] < row[1]['20 day low']:

        state = 0

    new_col.append(state)


df['result'] = new_col

df


date    C   55 day high 20 day low  result

0   2020-01-01 01:01:00 7147.69 7163.32 7147.69 0

1   2020-01-01 01:02:00 7158.31 7163.32 7147.69 0

2   2020-01-01 01:03:00 7164.08 7163.32 7147.69 1

3   2020-01-01 01:04:00 7157.01 7163.32 7147.69 1

4   2020-01-01 01:05:00 7159.85 7163.32 7147.69 1

5   2020-01-01 01:06:00 7161.29 7163.32 7147.69 1

6   2020-01-01 01:07:00 7161.29 7163.32 7147.69 1

7   2020-01-01 01:08:00 7145.28 7162.03 7147.69 0

8   2020-01-01 01:09:00 7161.29 7162.03 7147.69 0


查看完整回答
反對 回復 2023-03-01
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

這可能會幫助您解決問題。不確定我的邏輯是否在這里,但希望這能讓你更接近解決你的問題。


def logic(C,H,L):

    if (C > H and C < L):

        return(1)

    if (C < L):

        return(0)

    else:

        return(-1)

for C, H, L in df[['C', '55 day high', '20 day low']].itertuples(index=False):

    print(logic(C,H,L)


查看完整回答
反對 回復 2023-03-01
  • 2 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號