我有一张这样的桌子
kubectl get cm inpod -o jsonpath={.data}
map[application.yaml:ds:
hosts: '-'
keyspaces: '-'
password: ${dpt_password}
port: '9042'
username: ${dpt_username}
externalresources:
pluser:
url: https://inpod.com/v1
jdbc:
url: jdbc:oracle:thin:@//pxd.ord.com:1521/pxd
kafka:
bootstrap-servers: xl-kb01.inpod.com:19093,xl-kb02.inpod.com:19093
consumer:
group: inpod
schema-registry:
endpoint: https://pxd-dev.inpod.com:8443
security:
protocol: SSL
ssl:
client-auth: need
logging:
level:
com:
ab: INFO
ba: DEBUG
org:
hibernate: INFO
springframework: INFO
server:
ssl:
client-auth: need
enabled: 'true'
tomcat:
enabled: 'true'
file-date-format: .yyyy-MM-dd
prefix: access_log
rename-on-rotate: 'false'
rotate: 'true'
suffix: .log
endpoints_test:
url: http://localhost:8280/inpod/rest
]
我想基于id和id2的值创建一个计数器。
例如,id是客户ID,id2是订单ID,val是订单中的商品名称。我想为客户ID和订单ID创建一个计数器。这就是为什么前两行应具有相同的计数器1
我试过了,但是他们会给我这样的东西
id id2 val
a red apple
a red orange
b blue fish
c violet beef
a yellow banana
a black pork
我尝试过康明斯
id id2 val counter
a red apple 1
a red orange 2
b blue fish 1
c violet beef 1
a yellow banana 1
a black pork 1
但这不是我想要的
我想要一个这样的结果表
df['counter'] = df.groupby(['id','id2']).cumcount() + 1
谢谢
答案 0 :(得分:5)
好像您正在尝试计算cond2
对的唯一值:
(id, id2)
答案 1 :(得分:3)
您可以使用groupby.transform
和pandas.factorize
:
df['counter'] = df.groupby(['id'])['id2'].transform(lambda x: pd.factorize(x)[0]).add(1)
id id2 val counter
0 a red apple 1
1 a red orange 1
2 b blue fish 1
3 c violet beef 1
4 a yellow banana 2
5 a black pork 3