我试图找到解决方案,但失败了
我的主df包含交易数据,特别是信用卡名称:
transactionId, amount, type, person
1 -30 Visa john
2 -100 Visa Premium john
3 -12 Mastercard jenny
我按人分组,然后通过麻木的记录和金额进行汇总。
person numbTrans Amount
john 2 -130
jenny 1 -12
这很好,但我需要将信用卡类型的维度添加到我的df中。 我已经分组了一些正在使用的信用卡
index CreditCardName
0 Visa
1 Visa Premium
2 Mastercard
所以,我无法在我的主数据框架中创建一个名为' CreditCard_id'它使用字符串' Visa / Visa Premium / Mastercard'拉入列的索引。
transactionId, amount, type, CreditCardId, person
1 -30 Visa 0 john
2 -100 Visa Premium 1 john
3 -12 Mastercard 2 jenny
我需要这个,因为我正在做一些简单的kmeans聚类并且需要整数而不是字符串(或者至少我认为我这样做)
提前致谢
罗布
答案 0 :(得分:0)
如果您将'CreditCardName'设置为第二个df的索引,那么您只需拨打map
:
In [80]:
# setup dummydata
import pandas as pd
temp = """transactionId,amount,type,person
1,-30,Visa,john
2,-100,Visa Premium,john
3,-12,Mastercard,jenny"""
temp1 = """index,CreditCardName
0,Visa
1,Visa Premium
2,Mastercard"""
df = pd.read_csv(io.StringIO(temp))
# crucually set the index column to be the credit card name
df1 = pd.read_csv(io.StringIO(temp1), index_col=[1])
df
Out[80]:
transactionId amount type person
0 1 -30 Visa john
1 2 -100 Visa Premium john
2 3 -12 Mastercard jenny
In [81]:
df1
Out[81]:
index
CreditCardName
Visa 0
Visa Premium 1
Mastercard 2
In [82]:
# now we can call map passing the series, naturally the map will align on index and return the index value for our new column
df['CreditCardId'] = df['type'].map(df1['index'])
df
Out[82]:
transactionId amount type person CreditCardId
0 1 -30 Visa john 0
1 2 -100 Visa Premium john 1
2 3 -12 Mastercard jenny 2