如果表中的单元格大于0,使用python pandas打印单元格的列名和行名



我有麻烦检索列名和行单元格在一个表

我的场景是-如果表中任何元素大于0然后打印它的列和行名

的例子我附上了一张我的桌子的照片如果任何单元格大于0,我需要打印单元格的日期和槽位时间

我所期望的响应如下表所示

08-05-2022 , SLOT1(07.30-08.00)  
08-05-2022 , SLOT2(11.00-11.30)
08-05-2022 , SLOT3(14.00-14.30)
08-05-2022 , SLOT4(15.00-15.30)
09-05-2022 , SLOT1(07.30-08.00)
09-05-2022 , SLOT4(15.00-15.30)
10-05-2022 , SLOT3(14.00-14.30)
11-05-2022 , SLOT2(11.00-11.30)

点击这里

这个代码被我用来过滤单元格大于0的列从一张大桌子上我附上的图像是使用下面的代码过滤我找不到任何代码来解决我上面描述的问题

filtered = df.loc[df['SLOT1 (07.30-08.00)'] != 0]
print (filtered)
filtered2 = filtered2.loc[df['SLOT2 (11.00-11.30)'] != 0]
print(filtered2)

您可以先堆叠这些列,然后循环遍历每一行并打印符合要求的行:

# creating similar dataframe
cols = ["slot1", "slot2", "slot3", "slot4", "slot5", "slot6", "slot7", "slot8"]
df = pd.DataFrame(np.random.randint(0, 5, (4, 8)), columns=cols)
df["date"] = pd.date_range("2022-05-01", periods=4, freq="D")
df["day"] = ["MON", "TUES", "WED", "THURS"]
df = df[["date", "day"] + cols]
# loop through rows of stacked dataframe
for idx, i in df.set_index(["date", "day"]).stack().iteritems():
if i > 0:
print(idx)
#(Timestamp('2022-05-01 00:00:00'), 'MON', 'slot1')
#(Timestamp('2022-05-01 00:00:00'), 'MON', 'slot2')
#(Timestamp('2022-05-01 00:00:00'), 'MON', 'slot3')
#(Timestamp('2022-05-01 00:00:00'), 'MON', 'slot6')
#(Timestamp('2022-05-01 00:00:00'), 'MON', 'slot7')
#(Timestamp('2022-05-01 00:00:00'), 'MON', 'slot8')
#(Timestamp('2022-05-02 00:00:00'), 'TUES', 'slot1')
#(Timestamp('2022-05-02 00:00:00'), 'TUES', 'slot2')
#(Timestamp('2022-05-02 00:00:00'), 'TUES', 'slot3')
#(Timestamp('2022-05-02 00:00:00'), 'TUES', 'slot5')
#(Timestamp('2022-05-02 00:00:00'), 'TUES', 'slot6')
#(Timestamp('2022-05-02 00:00:00'), 'TUES', 'slot7')
#(Timestamp('2022-05-02 00:00:00'), 'TUES', 'slot8')
#...

需要将索引设置为日期和日期优先,以便每个槽仍然归属于给定的日期。因为那天也被设置为索引,所以这将在输出中显示。如果不需要,可以选择先删除它,或者更改循环的print语句:

for idx, i in df.set_index(["date", "day"]).stack().iteritems():
if i > 0:
print(idx[0].strftime("%Y-%m-%d"), ",", idx[2])

最新更新