熊猫:从数据框中检索索引以填充另一个df

时间:2014-09-16 14:53:33

标签: python pandas

我试图找到解决方案,但失败了

我的主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聚类并且需要整数而不是字符串(或者至少我认为我这样做)

提前致谢

罗布

1 个答案:

答案 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