我有以下df,并希望提取以下标记的值:
0 0 0
*141,902* 0 0
0 0 0
0 *140,927*0
0 0 0
114,2 150,213 *152,20*
0 0 *152,20*
0 139,682 0
更多说明:获取每列的前两个零之间的值。
i=0
for key,value in df_specific.iteritems():
if value[i]==0:
i +=1
if value[i]!=0:
print(value[i])
i += 1
if value[i] == 0:
break
df_specific.index += 1
上面的我的代码有效,但仅适用于第一列(不确定原因),因此仅给出了第一个值: 141,9028 。 我相信,我只需要一种直接移至下一篇专栏的方法。 有什么想法吗?
答案 0 :(得分:1)
尝试一下:
for key,values in df_specific.iteritems():
f = 0
ff = 0
for value in list(values):
if value!=0 and f==0:
print(value)
ff = 1
if value == 0 and ff == 1:
break
答案 1 :(得分:0)
尝试一下:
import pandas as pd
df = pd.DataFrame({"A":[1, 0, 0.5, 1, 0, 1], "B":[0, 1, 2, 3, 0, 1]})
df_ = (df == 0).cumsum() == 1
result = [df.loc[df_[col], col].values[1:] for col in df_.columns]
print(result)
# [array([0.5, 1. ]), array([1, 2, 3])]
如果没有找到解决方案的列,此代码将产生错误,如果可能发生,您可以尝试:
import pandas as pd
df = pd.DataFrame({"A":[1, 0, 0.5, 1, 0, 1], "B":[0, 1, 2, 3, 0, 1]})
df_ = (df == 0).cumsum() == 1
result = [df.loc[df_[col], col].values[1:]
if df.loc[df_[col], col].size
else np.array([])
for col in df_.columns if len(df.loc[df_[col], col].values)]
print(result)
# [array([0.5, 1. ]), array([1, 2, 3])]
如果要将结果合并到一个向量中,可以执行以下操作:
from itertools import chain
res = [*chain.from_iterable(result),]
print(res)
# [0.5, 1.0, 1, 2, 3]
或
res = [x for for l in result x in l ]
print(res)
# [0.5, 1.0, 1, 2, 3]