我试图在多个列上应用一个函数,然后创建多个列来计算每个条目的长度。
基本上我有 5 列,索引为 5,7,9,13 和 15,这些列中的每个条目都是表单的字符串,'WrappedArray(|2008-11-12, |2008-11-12)'
在我的函数中,我尝试剥离wrappedArray 部分并拆分两个值并(length - 1)
使用以下方法计算;
def updates(row,num_col):
strp = row[num_col.strip('WrappedAway')
lis = list(strp.split(','))
return len(lis) - 1
其中 num_col 是列的索引,cal 取值 5、7、9、13、15。我已经这样做了,但仅适用于 1 列:
fn = lambda row: updates(row,5)
col = df.apply(fn, axis=1)
df = df.assign(**{'count1':col.values})
我基本上想将此函数应用于所有列(不仅仅是上面提到的 5 列),然后在短代码中创建一个与列 5、7、9、13 和 15 关联的单独列,而不是分别为每个值。
我希望我说得有道理。
关于查找列表中元素的数量,看起来您可以简单地用于str.count()
查找','
字符串中的数量。为了将定义的函数应用于一组列,您可以执行以下操作:
cols = [5,7,9,13,15]
for col in cols:
col_counts = {'{}_count'.format(col): df.iloc[:,col].apply(lambda x: x.count(','))}
df = df.assign(**col_counts)
或者,您也可以使用strip('WrappedAway').split(',')
as you where using:
def count_elements(x):
return len(x.strip('WrappedAway').split(',')) - 1
for col in cols:
col_counts = {'{}_count'.format(col):
df.iloc[:,col].apply(count_elements)}
df = df.assign(**col_counts)
因此,例如使用以下数据框:
df = pd.DataFrame({'A': ['WrappedArray(|2008-11-12, |2008-11-12, |2008-10-11)', 'WrappedArray(|2008-11-12, |2008-11-12)'],
'B': ['WrappedArray(|2008-11-12,|2008-11-12)', 'WrappedArray(|2008-11-12, |2008-11-12)'],
'C': ['WrappedArray(|2008-11-12|2008-11-12)', 'WrappedArray(|2008-11-12|2008-11-12)']})
重新定义我们要计算元素数量的列集:
for col in [0,1,2]:
col_counts = {'{}_count'.format(col):
df.iloc[:,col].apply(count_elements)}
df = df.assign(**col_counts)
会产生:
A \
0 WrappedArray(|2008-11-12, |2008-11-12, |2008-1...
1 WrappedArray(|2008-11-12, |2008-11-12)
B \
0 WrappedArray(|2008-11-12,|2008-11-12)
1 WrappedArray(|2008-11-12, |2008-11-12)
C 0_count 1_count 2_count
0 WrappedArray(|2008-11-12|2008-11-12) 2 1 0
1 WrappedArray(|2008-11-12|2008-11-12) 1 1 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句