我想根据字符串的最后一个字符为数据框创建替代顺序。
这是一个示例数据框:
import pandas as pd
df = pd.DataFrame({'Date': ('2019-01-01', '2019-01-01', '2019-01-02', '2019-01-02', '2019-01-02', '2019-01-02'),
'Account': ('123A', '123B', '456A', '456A', '456B', '456B'),
'Type': ('1', '1', '2', '2', '2', '2')})
df = df.sort_values(['Date', 'Type'])
df
Date Account Type
0 2019-01-01 123A 1
1 2019-01-01 123B 1
2 2019-01-02 456A 2
3 2019-01-02 456A 2
4 2019-01-02 456B 2
5 2019-01-02 456B 2
我想要的输出是:
Date Account Type
0 2019-01-01 123A 1
1 2019-01-01 123B 1
2 2019-01-02 456A 2
4 2019-01-02 456B 2
3 2019-01-02 456A 2
5 2019-01-02 456B 2
如果您看一下第2行和第4行,您会发现the的最后一个字符是备用字符。所以基本上,我想按日期,类型和df ['Account']。str [-1:]进行排序,其中df ['Account']。str [-1:]始终是同一根的交替AB,AB在帐户中。
我试图创建新列来识别有问题的行,但是不知道如何重新排序。
df['test1'] = np.where((df['Account'].str[:3].shift(-1) == df['Account'].str[:3]) & (df['Account'].str[-1:].shift(-1) == 'B') & (df['Account'].str[-1:] == 'B'), 1, 0)
答案 0 :(得分:3)
尝试一下:
df['rank'] = df.groupby(['Date','Type', 'Account']).cumcount()
df.sort_values(['Date', 'Type', 'rank'])
输出:
+----+---------------------+-----------+--------+--------+
| | Date | Account | Type | rank |
|----+---------------------+-----------+--------+--------|
| 0 | 2019-01-01 00:00:00 | 123A | 1 | 0 |
| 1 | 2019-01-01 00:00:00 | 123B | 1 | 0 |
| 2 | 2019-01-02 00:00:00 | 456A | 2 | 0 |
| 4 | 2019-01-02 00:00:00 | 456B | 2 | 0 |
| 3 | 2019-01-02 00:00:00 | 456A | 2 | 1 |
| 5 | 2019-01-02 00:00:00 | 456B | 2 | 1 |
+----+---------------------+-----------+--------+--------+