IF语句:如何在Python中打印列名

时间:2020-06-16 15:33:32

标签: python pandas if-statement

这是我的问题

我有这个DataFrame:

df = pd.DataFrame({'Date':[1,2,3],
                   'Paul':[8,10,13],
                   'Mathieu':[18,20,2],
                   'Jacques':[2,1,70]})

df = df.set_index('Date')

我的目标是创建具有以下条件的IF语句: 如果滚动平均值2天的最后一个值<滚动平均值3天,并且第一个值(第1天)大于最后一个值(第3天),则打印列的名称。

这就是我开始的:

def test(data):
    end = data.iloc[-1]
    start = data.iloc[0]
    end_rolling_2D = data.rolling(2).mean().iloc[-1]
    end_rolling_3D = data.rolling(3).mean().iloc[-1]

    if end_rolling_2D < end_rolling_3D and start > end :
        print(data.columns)

但是我有这个错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我真的不知道如何解决这个问题,我知道那个问号应该是'Mathieu',因为他是唯一符合条件的人。

我对Python还是很陌生,所以如果有人想解决这个问题,欢迎您!

谢谢。

2 个答案:

答案 0 :(得分:2)

startendend_rolling_2Dend_rolling_3DSeries对象,请使用pd.Series.all()

替换

if end_rolling_2D > end_rolling_3D and start > end

使用

if ((end_rolling_2D>end_rolling_3D) & (start>end)).all()

要获取满足条件的位置,请使用boolean indexing

mask = (end_rolling_2D<end_rolling_3D) & (start>end)
print(df.columns[mask])
# Index(['Mathieu'], dtype='object')

答案 1 :(得分:0)

将功能更改为:

def test(data):
    end = data.iloc[-1]
    start = data.iloc[0]
    end_rolling_2D = data.rolling(2).mean().iloc[-1]
    end_rolling_3D = data.rolling(3).mean().iloc[-1]

    if ((end_rolling_2D > end_rolling_3D) & (start > end)).all() :
        print(data.columns)

请注意,我添加了方括号。并将and替换为& 但是,我不希望有任何符合您条件的数据。