我在 Pandas 中有这个数据框:
Value Date
ISIN
TRT010213A15 10 2019-11-15
TRT010213T23 100 2019-11-15
TRT010213T23 70 2019-12-20
TRT080328T15 150 2018-10-12
TRT080420T12 175 2018-05-11
TRT150120T16 150 2019-08-29
TRT150120A05 15 2019-11-18
TRT150120T16 300 2019-10-15
TRT150120T16 275 2019-11-18
如果索引(“ISIN”)的前9个字符和“日期”列中的值相同,如何获得“值”列之间的差异(减法)。减法将在第 10 个字符为“T”和第 10 个字符为“A”的索引之间进行。
例如第一个和第二个索引的前 9 个字符是“TR010213”,“日期”值为“2019-11-15”。在这种情况下,第二行的“值”的新值(因为索引的第 10 个字符是“T”)应该是 90(100-10),而第一行的“值”(索引的第 10 个字符是“A”)不会被改变。
我想得到这个数据框:
Value Date
ISIN
TRT010213A15 10 2019-11-15
TRT010213T23 90 2019-11-15
TRT010213T23 70 2019-12-20
TRT080328T15 150 2018-10-12
TRT080420T12 175 2018-05-11
TRT150120T16 150 2019-08-29
TRT150120A05 15 2019-11-18
TRT150120T16 300 2019-10-15
TRT150120T16 260 2019-11-18
最佳答案
你可以用这个:
df.update(df.groupby([df.index.str[:9],'Date']).transform('diff'))
Value Date
ISIN
TRT010213A15 10.0 2019-11-15
TRT010213T23 90.0 2019-11-15
TRT010213T23 70.0 2019-12-20
TRT080328T15 150.0 2018-10-12
TRT080420T12 175.0 2018-05-11
TRT150120T16 150.0 2019-08-29
TRT150120A05 15.0 2019-11-18
TRT150120T16 300.0 2019-10-15
TRT150120T16 260.0 2019-11-18
关于python - 如何过滤包含相似模式的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60302589/