我已经在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.applymap
或DataFrame.apply
和Series.str.len
的所有值获取字符串的长度:print (Table1.applymap(len))
A B C
0 5 2 7
1 4 2 2
2 4 5 2
然后使用
Table2
将Series
转换为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/False
到1/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/