在 Python 3 Pandas 中处理需要创建新列的数据框。我有两个相似的列,具有不同长度的字符串。新列应返回长度为 13 个字符的第 1 列或第 2 列。在 Excel 中,我会将其写为:c2=if(len(b2)=13,b2,a2)
,然后将公式复制下来。
我需要解释的代码是:
df = pd.read_csv("example15.csv")
#create a new column with if-then statment
df['13_digit_#'] = (df.column1 len = 13 or df.column2 len = 13)
我该如何重写最后一行? 非常感谢!
最佳答案
我认为您可以将 numpy.where
与 str.len
或 apply(len)
一起使用:
df['13_digit_#'] = np.where((df.column1.str.len() == 13) |
(df.column2.str.len() == 13), 'a', 'b')
或者如果有其他条件:
df['13_digit_#'] = np.where(df.column1.str.len() == 13, df.column1, df.column2)
示例:
df = pd.DataFrame({'column1':['0123456789abc','a','b'],
'column2':['abcabcabcabca','c','d']})
print (df)
column1 column2
0 0123456789abc abcabcabcabca
1 a c
2 b d
df['13_digit_#'] = np.where(df.column1.str.len() == 13, df.column1, df.column2)
#df['13_digit_#'] = np.where(df.column1.apply(len) == 13, df.column1, df.column2)
print (df)
column1 column2 13_digit_#
0 0123456789abc abcabcabcabca 0123456789abc
1 a c c
2 b d d
关于pandas - Python 3 pandas 使用长度添加带有 if then 语句的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39833221/