Python pandas:基于给定序列的有序文件名的列

时间:2018-01-25 13:11:55

标签: python pandas dataframe pattern-matching string-matching

我想在数据框中创建一个包含基于特定序列号的文件名列表的列。

我的主数据框如下所示:

  num letter 
0    0    I   
1    1    P  
2    2    I  
2    3    B  
2    4    P  
2    5    B  
2    6    I  

我拥有的文件名是:I-0001.jpg, I-0002.jpg, I-0003.jpg, P-0001.jpg, P-0002.jpg, B-0001.jpg, B-0002.jpg

我想要的最终结果是:

   num  letter  file
0    0    I   I-0001.jpg
1    1    P   P-0001.jpg
2    2    I   I-0002.jpg
2    3    B   B-0001.jpg
2    4    P   P-0002.jpg
2    5    B   B-0002.jpg
2    6    I   I-0003.jpg

所以基本上,列文件应该是这样的,任何时候我,或P,或B在"字母"发现它根据每个文件中的编号选择文件名中包含I,P或B的文件名。

任何帮助?

1 个答案:

答案 0 :(得分:1)

您可以将letterSeries与[{3}}创建的letter一起用于1个计数器,添加string,转换为df['file'] = (df['letter'] + '-' + df.groupby('letter').cumcount().add(1).astype(str).str.zfill(4) + '.jpg') print (df) num letter file 0 0 I I-0001.jpg 1 1 P P-0001.jpg 2 2 I I-0002.jpg 2 3 B B-0001.jpg 2 4 P P-0002.jpg 2 5 B B-0002.jpg 2 6 I I-0003.jpg s并在必要时添加GroupBy.cumcount

print (df.groupby('letter').cumcount())
0    0
1    0
2    1
2    0
2    1
2    1
2    2
dtype: int64

print (df.groupby('letter').cumcount().add(1).astype(str).str.zfill(4))
0    0001
1    0001
2    0002
2    0001
2    0002
2    0002
2    0003
dtype: object

<强>详细

concat(substring(PaymentDate,   1 div    (boolean(PaymentDate) and PaymentDate!='')),
       substring(AccountingDate,1 div not(boolean(PaymentDate) and PaymentDate!='')))