【发布时间】:2018-01-24 18:24:32
【问题描述】:
在python中使用pandas数据框:
我正在尝试从数据框中获取以下数据,但无法修复我的循环以获得正确的结果。
数据集的小样本:
BERTH FROM_BERTH BI
29 H2 0
29 09 0
29 J5 0
C5 NaN 1
J4 NaN 1
J2 NaN 1
这是数据集的一部分(我需要使用的相关列),这是我希望输出的样子:
29, H2, 09, J5, C5, J4, J2
即:如果 BI 为 0,我想要来自 BERTH 的值,然后是 FROM_BERTH 的值,直到 BI 变为 1,然后返回给我 BERTH(直到 BI 再次变为 1,依此类推)。
以下是我尝试过的代码及其结果:
test_berth2 = []
for i in range(0,6):
if df3_test.loc[i,'BI'] == 0 & df3_test.iloc[i,21] != df3.iloc[i-1,21]:
test_berth2.append(df3_test.loc[i,'BERTH'])
test_berth2.append(df3_test.loc[i,'FROM_BERTH'])
elif df3_test.loc[i,'BI'] == 0 & df3_test.iloc[i,21] == df3.iloc[i+1,21]:
test_berth2.append(df3_test.loc[i,'FROM_BERTH'])
else :
test_berth2.append(df3_test.loc[i,'BERTH'])
test_berth2
结果:
['29', 'H2', '29', '09', '29', 'J5', 'C5', 'J4', 'J2']
循环 2:
for i in range(0,6):
if df3_test.iloc[i,21] == 0:
print (df3_test.loc[i,'BERTH'])
while df3_test.iloc[i,21] == 0:
print (df3_test.loc[i,'FROM_BERTH'])
i = i+1
else:
print (df3_test.loc[i,'BERTH'],'1')
结果:
29, H2, 09, J5, 29, 09, J5, 29, J5, C5 1, J4 1, J2 1
PS:第 21 列的 iloc 是 'BI' 顺便说一句
【问题讨论】:
-
在你的第一个“for”循环中,在 if/elif 条件中,确保 & 符正在执行您希望它们执行的操作。我怀疑您需要布尔(“and”)而不是按位(“&”)运算符。
-
从未尝试过,感谢您的建议,将试一试。希望这会奏效!
标签: python loops pandas for-loop while-loop