gpt4 book ai didi

python - 如何将数据框列数据添加到另一个数据框中的一系列索引?

转载 作者:行者123 更新时间:2023-11-28 20:00:33 25 4
gpt4 key购买 nike

我有一个名为 df1 的数据框:

        Long_ID     IndexBegin         IndexEnd
0 10000001 0 3
1 10000002 3 6
2 10000003 6 10

我有第二个名为 df2 的数据框,它的长度可达 100 万行:

      Short_ID
0 1
1 2
2 3
3 10
4 20
5 30
6 100
7 101
8 102
9 103

我想将 Long_ID 链接到 Short_ID,如果 (IndexBegin:IndexEnd) 是(0:3),然后 Long_ID 被插入到 df2 中索引 0 到 2 (IndexEnd - 1)。起始索引和结束索引使用 df1 的最后两列确定。

因此最终,我的最终数据框如下所示:df3:

      Short_ID       Long_ID
0 1 10000001
1 2 10000001
2 3 10000001
3 10 10000002
4 20 10000002
5 30 10000002
6 100 10000003
7 101 10000003
8 102 10000003
9 103 10000003

首先,我尝试将 df2 的索引存储为键并将 Short_ID 作为值存储在字典中,然后逐行迭代,但这太慢了。这让我了解了矢量化。

然后,我尝试使用 where(),但我得到了“ValueError:只能比较相同标记的 Series 对象。”

df2 = df2.reset_index()
df2['Long_ID'] = df1['Long_ID'] [ (df2['index'] < df1['IndexEnd']) & (df2['index'] >= df1['IndexBegin']) ]

我对编程比较陌生,如果有人能提供更好的方法来解决这个问题,我将不胜感激。我已经复制了下面的代码:

df1_data = [(10000001, 0, 3), (10000002, 3, 6), (10000003, 6, 10)]
df1 = pd.DataFrame(df1_data, columns = ['Long_ID', 'IndexBegin', 'IndexEnd'])

df2_data = [1, 2, 3, 10, 20, 30, 100, 101, 102, 103]
df2 = pd.DataFrame(df2_data, columns = ['Short_ID'])

最佳答案

df2 不需要“IndexEnd”,只要范围是连续的。您可以使用 pd.merge_asof :

(pd.merge_asof(df2.reset_index(), df1, left_on='index', right_on='IndexBegin')
.reindex(['Short_ID', 'Long_ID'], axis=1))

Short_ID Long_ID
0 1 10000001
1 2 10000001
2 3 10000001
3 10 10000002
4 20 10000002
5 30 10000002
6 100 10000003
7 101 10000003
8 102 10000003
9 103 10000003

关于python - 如何将数据框列数据添加到另一个数据框中的一系列索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57137150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com