我已经在Python中将表作为数据帧加载,并且我想检查所有变量的长度是否符合支持表中为每个变量指示的长度。

我已加载的表(表1)的结构如下
 Table 1

指示变量应保留多长时间的表(表2)如下:
Table 2

我想面对表1中每一列的每一行的长度,作为表2中的长度,并创建一个Flag,以便当不满足该行的条件时得到1,否则为0

Example

我不是专家,因此我尝试了以下代码:

new = pd.Dataframe()
for c,f in zip(Table2['variable'],Table2['length']):
    if f == Table1[c].astype(str).str.len():
        new['warning_'+c] == 0
    else:
        new['warning_'+c] == 1


我收到以下错误:
ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

最佳答案

使用:

s = Table2.set_index('variable')['length']
Table1 = Table1.applymap(len).ne(s).astype(int).add_prefix('check_')


选择:

Table1 = Table1.apply(lambda x: x.str.len()).ne(s).astype(int).add_prefix('check_')

print (Table1)
   check_A  check_B  check_C
0        1        0        0
1        0        0        1
2        0        1        1


说明:

首先使用DataFrame.applymapDataFrame.applySeries.str.len的所有值获取字符串的长度:

print (Table1.applymap(len))

   A  B  C
0  5  2  7
1  4  2  2
2  4  5  2


然后使用Table2Series转换为DataFrame.set_index

s = Table2.set_index('variable')['length']
print (s)
variable
A    4
B    2
C    7
Name: length, dtype: int64


然后用不等于DataFrame.ne的方式进行比较,然后将其转换为True/False1/0映射的整数:

print (Table1.applymap(len).ne(s).astype(int))
   A  B  C
0  1  0  0
1  0  0  1
2  0  1  1

关于python - 当满足条件时,如何将表中特定列的每一行的长度与支持表中的特定值相面对,并创建一个Flag?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58114565/

10-12 17:34