Python:查找另一个数据帧头中的值,并替换/映射相应的值

2024-05-08 03:49:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个索引成员的数据帧,它看起来像这样(a,B,C,。。。是公司名称):

df_members

        Date  1  2  3  4
0 2016-01-01  A  B  C  D
1 2016-01-02  B  C  D  E
2 2016-01-03  C  D  E  F
3 2016-01-04  F  A  B  C
4 2016-01-05  B  C  D  E
5 2016-01-06  A  B  C  D

我还有第二张表,包括价格:

^{pr2}$

目标是将df1中的所有公司名称替换为df_prices中的价格,从而得到df_result:

df_result

         Date   1   2   3   4 
0  2016-01-01  13  14  15  16
1  2016-01-02  21  22  23  24
2  2016-01-03  29  30  31  32
3  2016-01-04  39  34  35  36
4  2016-01-05  42  43  44  45
5  2016-01-06  48  49  50  51

我已经有一个解决方案,我迭代了df_成员中的所有单元格,查找df_prices中的值,并将它们写入一个新的数据框df_result中。问题是我的数据帧非常大,这个过程大约需要7个小时。

我已经尝试过使用merge/join、map或lookup函数,但它不能解决问题。

我的方法如下:

# Create new dataframes
df_result = pd.DataFrame(columns=df_members.columns, index=unique_dates_list)

# Load prices
df_prices = prices

# Search ticker & write values in new dataframe
for i in range(0,len(df_members)):
    for j in range(0,len(df_members.columns)):
        if str(df_members.iloc[i, j]) != 'nan' and df_members.iloc[i, j] in df_prices.columns:
            df_result.iloc[i, j] = df_prices.iloc[i, df_prices.columns.get_loc(df_members.iloc[i, j])]

问:有没有一种方法可以更有效地映射这些值?


Tags: columns数据方法in名称dfnewdate
1条回答
网友
1楼 · 发布于 2024-05-08 03:49:07

^{}将执行您需要的操作:

代码:

df_result = pd.DataFrame(columns=[], index=df_members.index)
for column in df_members.columns:
    df_result[column] = df_prices.lookup(
        df_members.index, df_members[column])

测试代码:

^{pr2}$

结果:

             1   2   3   4
Date                      
2016-01-01  13  14  15  16
2016-01-02  21  22  23  24
2016-01-03  29  30  31  32
2016-01-04  39  34  35  36
2016-01-05  42  43  44  45
2016-01-06  48  49  50  51

相关问题 更多 >