我有一个像下面的数据框。
import pandas as pd
import numpy as np
raw_data = {'student':['A','B','C','D','E'],
'score': [100, 96, 80, 105,156],
'height': [7, 4,9,5,3],
'trigger1' : [84,95,15,78,16],
'trigger2' : [99,110,30,93,31],
'trigger3' : [114,125,45,108,46]}
df2 = pd.DataFrame(raw_data, columns = ['student','score', 'height','trigger1','trigger2','trigger3'])
print(df2)
我需要基于多个条件派生Flag列。
我需要比较触发器1 -3列的得分和身高列。
标志栏:
如果得分大于等于触发器1并且高度小于8,则红色-
如果得分大于等于触发器2并且高度小于8,则黄色-
如果得分大于等于触发器3并且高度小于8,则橙色-
如果高度大于8,则留空
如果在pandas数据框中有其他条件并导出列,该如何写?
预期产量
student score height trigger1 trigger2 trigger3 Flag
0 A 100 7 84 99 114 Yellow
1 B 96 4 95 110 125 Red
2 C 80 9 15 30 45 NaN
3 D 105 5 78 93 108 Yellow
4 E 156 3 16 31 46 Orange
对于我原始问题中的其他列Text1,我已经厌倦了这个问题,但是使用astype(str)进行串联时,整数列未转换字符串吗?
def text_df(df):
if (df['trigger1'] <= df['score'] < df['trigger2']) and (df['height'] < 8):
return df['student'] + " score " + df['score'].astype(str) + " greater than " + df['trigger1'].astype(str) + " and less than height 5"
elif (df['trigger2'] <= df['score'] < df['trigger3']) and (df['height'] < 8):
return df['student'] + " score " + df['score'].astype(str) + " greater than " + df['trigger2'].astype(str) + " and less than height 5"
elif (df['trigger3'] <= df['score']) and (df['height'] < 8):
return df['student'] + " score " + df['score'].astype(str) + " greater than " + df['trigger3'].astype(str) + " and less than height 5"
elif (df['height'] > 8):
return np.nan
您需要使用上下限进行链式比较
def flag_df(df):
if (df['trigger1'] <= df['score'] < df['trigger2']) and (df['height'] < 8):
return 'Red'
elif (df['trigger2'] <= df['score'] < df['trigger3']) and (df['height'] < 8):
return 'Yellow'
elif (df['trigger3'] <= df['score']) and (df['height'] < 8):
return 'Orange'
elif (df['height'] > 8):
return np.nan
df2['Flag'] = df2.apply(flag_df, axis = 1)
student score height trigger1 trigger2 trigger3 Flag
0 A 100 7 84 99 114 Yellow
1 B 96 4 95 110 125 Red
2 C 80 9 15 30 45 NaN
3 D 105 5 78 93 108 Yellow
4 E 156 3 16 31 46 Orange
注意:您可以使用非常嵌套的np.where来执行此操作,但是我更喜欢将函数应用于多个if-else
我有一个DF,其中包含一个巨大的可解析元数据,作为Dataframe中的单个字符串列,我们称之为DFA,使用ColmnA。 我想通过一个函数,ClassXYZ = Func1(ColmnA)将ColmnA这一列分成多个列。这个函数返回一个具有多个变量的类ClassXYZ,现在每个变量都必须映射到新的列,比如ColmnA1、ColmnA2等。 我如何通过调用Func1一次来完成从一个数据帧到另一个数
问题内容: 这是我的pandas数据帧’df’: I want to plot 3 groups of bar chart (according to ): for each channel: plot control booked value vs treatment booked value. hence i should get 6 bar charts, in 3 groups where
问题内容: 我的df有3栏 我想删除df.col_1为1.0且df.col_2为0.0的行。因此,我会得到: 我试过了: 它给了我错误: 任何想法如何解决上述问题? 问题答案: drop是一种方法,您使用调用它,因此它为您提供了: 更改为(正常方法调用),它应该可以工作: 输出量
我有一个datafram df,我想得到列值等于1b0c0和d0的行 它说,;级数的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我有不同的数据帧,需要根据日期列将它们合并在一起。如果我只有两个数据帧,我可以使用,要使用三个数据帧,我可以使用,但是使用多个数据帧会变得非常复杂和不可读。 所有数据帧都有一个公共列-,但它们的行数和列数都不相同,我只需要其中每个日期对每个数据帧都是公共的行。 所以,我试图编写一个递归函数,返回一个包含所有数据的数据帧,但它不起作用。那么我应该如何合并多个数据帧呢? 我尝试了不同的方法,得到了一些
我想从一个目录中读取几个csv文件到pandas中,并将它们连接到一个大的数据帧中。不过我还没弄明白。以下是我目前掌握的情况: 我想我需要在for循环中得到一些帮助???