【发布时间】:2017-01-15 15:43:43
【问题描述】:
我需要你们所有人的帮助 我正在使用来自 excel 的数据表单,所以基本上现在我有这样的东西。
csr id ac otc tm lease maint
1 456 b 0 0 0 0
1 543 a 0 1 1 0
1 435 e 0 0 0 0
2 123 w 1 1 1 1
2 123 g 0 0 0 0
3 987 j 0 0 0 0
4 258 k 1 1 1 1
4 258 m 0 0 0 0
所以我需要删除 'otc' 'tm' 'lease' 'maint' 列中为零的行。我做这样的事情
df = pd.read_excel(xlsx,'Sheet1')
df_zero = df[(df['OTC'] == 0) & (df['TM'] == 0) & (df['Lease'] == 0) & (df['Maint'] == 0) & (df['Support'] == 0) & (df['Other'] == 0)]
通过这种方式,我打开文件并将特定列中包含零的所有行保存在 df_zero 中。那么
df1 = df_zero.loc[:, 'CSR']
基本上这会将特定列中带有零的行的 CSR 编号保存在 df1 中,就像这样
csr
1
1
2
3
4
所以我认为我这样做并解决了问题。
for n1 in df1:
df = df[df.CSR != n1]
但是这里的问题是,正如您在 CSR 1 中看到的那样,我们有 3 个不同的行,如果我运行“for”,我将删除其中的 3 个,我只需要删除那些有零的行在特定列中('otc' 'tm' 'lease' 'maint')。
如果我发现的值为零,我认为在“for”中移动到 CSR,另一个移动到“otc”中移动到“tm”(在同一行)检查零,然后'lease' 和 'maint' 在同一行中,如果此列中的任何一列不为零,则跳转到下一个 CSR。在这个例子中。我们将删除 CSR 1,因为它们 ('otc' 'tm' 'lease' 'maint') 都为零,然后跳转到下一个 CSR,再次为 1,但在这种情况下,我们在 'otc' 中为零但是'tm' 中的 1,所以我们必须跳转到下一个 CSR 再次为 1 但所有列('otc' 'tm' 'lease' 'maint')都为零,所以我们删除该行,并继续这个直到最后一个 CSR...
我认为这可行,但我在实施时遇到了一些问题,或者你们中的任何人都有更好的想法。感谢和抱歉英语不好
【问题讨论】:
标签: python excel pandas dataframe filter