我想在数据框中创建一个包含基于特定序列号的文件名列表的列。
我的主数据框如下所示:
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的文件名。
任何帮助?
答案 0 :(得分:1)
您可以将letter
列Series
与[{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!='')))