Ama*_*nda 19 python search dataframe pandas
我有两个数据帧,第一个有1000行,看起来像:
Date Group Family Bonus
2011-06-09 tri23_1 Laavin 456
2011-07-09 hsgç_T2 Grendy 679
2011-09-10 bbbj-1Y_jn Fantol 431
2011-11-02 hsgç_T2 Gondow 569
Run Code Online (Sandbox Code Playgroud)
该列Group
具有不同的值,有时会重复,但通常约有50个唯一值.
第二个数据框包含所有这50个唯一值(50行)以及与这些值相关联的酒店:
Group Hotel
tri23_1 Jamel
hsgç_T2 Frank
bbbj-1Y_jn Luxy
mlkl_781 Grand Hotel
vchs_94 Vancouver
Run Code Online (Sandbox Code Playgroud)
我的目标是Group
将第一个数据帧的列中的值替换为Hotel
第二个数据帧的列Hotel
的相应值,或者使用相应的值创建列.当我试图通过任务来完成它时
df1.loc[(df1.Group=df2.Group), 'Hotel']=df2.Hotel
Run Code Online (Sandbox Code Playgroud)
我有一个错误,即数据帧的大小不同,因此无法进行比较
EdC*_*ica 29
如果您将索引设置为另一个df上的"组"列,则可以map
在原始df"组"列上替换使用:
In [36]:
df['Group'] = df['Group'].map(df1.set_index('Group')['Hotel'])
df
Out[36]:
Date Group Family Bonus
0 2011-06-09 Jamel Laavin 456
1 2011-07-09 Frank Grendy 679
2 2011-09-10 Luxy Fantol 431
3 2011-11-02 Frank Gondow 569
Run Code Online (Sandbox Code Playgroud)
小智 8
您还可以创建一个字典并使用 apply:
hotel_dict = df2.set_index('Group').to_dict()
df1['Group'] = df1['Group'].apply(lambda x: hotel_dict[x])
Run Code Online (Sandbox Code Playgroud)
这是一个老问题,但这是另一种方法,它不像 pandas 方法,但速度很快
\n\n复制数据帧 1 - 这将被更新
\n\ndf_1\n\n Date Group Family Bonus\n0 2011-06-09 tri23_1 Laavin 456\n1 2011-07-09 hsg\xc3\xa7_T2 Grendy 679\n2 2011-09-10 bbbj-1Y_jn Fantol 431\n3 2011-11-02 hsg\xc3\xa7_T2 Gondow 569\n
Run Code Online (Sandbox Code Playgroud)\n\n复制数据帧 2 - 查找
\n\ndf_2\n\n Group Hotel\n0 tri23_1 Jamel\n1 hsg\xc3\xa7_T2 Frank\n2 bbbj-1Y_jn Luxy\n3 mlkl_781 Grand Hotel\n4 vchs_94 Vancouver\n
Run Code Online (Sandbox Code Playgroud)\n\n从数据框 1 中获取所有酒店 ID(键列)作为列表
\n\nkey_list = list(df_1['Group'])\n\n['tri23_1', 'hsg\xc3\xa7_T2', 'bbbj-1Y_jn', 'hsg\xc3\xa7_T2']\n
Run Code Online (Sandbox Code Playgroud)\n\n从查找数据帧创建一个字典,其中包含键 col 和值 col
\n\ndict_lookup = dict(zip(df_2['Group'], df_2['Hotel']))\n\n{'bbbj-1Y_jn': 'Luxy',\n 'hsg\xc3\xa7_T2': 'Frank',\n 'mlkl_781': 'Grand Hotel',\n 'tri23_1': 'Jamel',\n 'vchs_94': 'Vancouver'}\n
Run Code Online (Sandbox Code Playgroud)\n\n通过查找值创建列表来替换值并将其分配给数据框 1 列
\n\ndf_1['Group'] = [dict_lookup[item] for item in key_list]\n
Run Code Online (Sandbox Code Playgroud)\n\n更新数据框 1
\n\n Date Group Family Bonus\n0 2011-06-09 Jamel Laavin 456\n1 2011-07-09 Frank Grendy 679\n2 2011-09-10 Luxy Fantol 431\n3 2011-11-02 Frank Gondow 569\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
22556 次 |
最近记录: |