Pandas concat使用多列的一列

时间:2018-12-06 14:31:40

标签: python pandas concat

我正在尝试加入一个新数据,该数据在多索引的一列的每个值中都有一个值。一个基本的例子是:

data = io.StringIO('''Fruit,Color,Count,Price
Apple,Red,3,$1.29
Apple,Green,9,$0.99
Pear,Red,25,$2.59
Pear,Green,26,$2.79
Lime,Green,99,$0.39
''')
df_unindexed = pandas.read_csv(data)
df = df_unindexed.set_index(['Fruit', 'Color'])
df

join = io.StringIO('''Fruit,Count2
Apple,3
Pear,25
Lime,99
''')
join = pandas.read_csv(join)
join = join.set_index(['Fruit'])
join

我想仅使用索引的水果列来连接新数据,给出:

             Count  Price  Count2
Fruit Color                      
Apple Red        3  $1.29       3
      Green      9  $0.99       3
Pear  Red       25  $2.59      25
      Green     26  $2.79      25
Lime  Green     99  $0.39      99

3 个答案:

答案 0 :(得分:3)

on='Fruit'

您可以使用join参数指定将哪个索引级别或列用作on条件。

df.join(join, on='Fruit')

             Count  Price  Count2
Fruit Color                      
Apple Red        3  $1.29       3
      Green      9  $0.99       3
Pear  Red       25  $2.59      25
      Green     26  $2.79      25
Lime  Green     99  $0.39      99

答案 1 :(得分:2)

get_level_valuesmap一起使用,在最新版本number中应省略:

.get

如果可能,df['count2'] = df.index.get_level_values('Fruit').map(join['Count2'].get) print (df) Count Price count2 Fruit Color Apple Red 3 $1.29 3 Green 9 $0.99 3 Pear Red 25 $2.59 25 Green 26 $2.79 25 Lime Green 99 $0.39 99 中的多列使用reset_indexjoinset_index

join

答案 2 :(得分:1)

使用reset_index + set_index + assign

df.reset_index(level=1).assign(count2=join.Count2).set_index('Color',append=True)
Out[1068]: 
             Count  Price  count2
Fruit Color                      
Apple Red        3  $1.29       3
      Green      9  $0.99       3
Pear  Red       25  $2.59      25
      Green     26  $2.79      25
Lime  Green     99  $0.39      99