我有一个数据帧df
>>df
LED CFL Incan Hall Reading
0 3 2 1 100 150
1 2 3 1 150 100
2 0 1 3 200 150
3 1 2 4 300 250
4 3 3 1 170 100
我想再创建两个包含lists
的列,一个用于"Hall"
,另一个用于"Reading"
>>df_output
LED CFL Incan Hall Reading Hall_List Reading_List
0 3 2 1 100 150 [0,2,0] [2,0,0]
1 2 3 1 150 100 [0,3,0] [2,0,0]
2 0 1 3 200 150 [0,1,0] [0,0,2]
3 1 2 4 300 250 [0,2,0] [1,0,0]
4 3 3 1 100 100 [0,2,0] [2,0,0]
列表中的每个值填充如下:
cfl_rating = 50
led_rating = 100
incan_rating = 25
对于Hall_List
:
首选CFL>;LED>;白炽灯。只使用其中一种(CFL或LED或白炽灯)。你知道吗
我们首先检查CFL != 0
,如果True
,然后计算min(ceil(Hall/CFL_rating),CFL)
。对于index=0
,其计算结果为2。因此我们有[0,2,0],而对于index=2
我们有[0,1,0]。你知道吗
与Reading_List
类似,首选LED>;白炽灯>;CFL。
对于index=2
,我们有LED == 0
,所以我们计算min(ceil(Reading/Incan_rating),Incan)
,因此读取列表是[0,0,2]
我的问题是: 有没有“熊猫/Python”的方法?我目前正在遍历每一行,并使用if-elif-else条件来赋值。你知道吗
我的代码片段如下所示:
#Hall_List
for i in range(df.shape[0]):
Hall = []
if (df['CFL'].iloc[i] != 0):
Hall.append(0)
Hall.append(min((math.ceil(df['Hall'].iloc[i]/cfl_rating)),df['CFL'].iloc[i]))
Hall.append(0)
elif (df['LED'].iloc[i] != 0):
Hall.append(min((math.ceil(df['Hall'].iloc[i]/led_rating)),df['LED'].iloc[i]))
Hall.append(0)
Hall.append(0)
else:
Hall.append(0)
Hall.append(0)
Hall.append(min((math.ceil(df['Hall'].iloc[i]/incan_rating)),df['Incan'].iloc[i]))
df['Hall_List'].iloc[i] = Hall
这是真的很慢,肯定感觉像一个糟糕的方式来编码。你知道吗
为了简单起见,我缩短了你的公式,但你应该用数据框应用(轴=1)
这将获取每一行和return and ndarray,然后您可以应用您想要的任何函数,例如:
把函数改成你喜欢的。你知道吗
希望这有帮助
相关问题 更多 >
编程相关推荐