如何有效地改变熊猫数据框架值

时间:2018-05-31 14:59:45

标签: python pandas

假设我有2个数据帧。

第一

100K rows
columns: ID, ch1,ch2...ch10,
binary values

第二

1000K rows
columns: ID, CH.

说我想在DF2中添加DF1的值,在1列中它将适合ID& chan。

我尝试用一​​个简单的for循环来完成它但是花了几分钟才过去了前10K行...我想知道它是如何有效地完成的 - 好像我已经用numpy完成了它,它的工作速度更快。 为了澄清,ID可以在DF2中进行洗牌。所以我无法根据DF1预测它的位置。

提前感谢!

1 个答案:

答案 0 :(得分:0)

更新了帖子:

啊,好的。我想我得到你所说的。 也许尝试这样的事情:

df1 = pd.DataFrame({ "ID":[1,2,3], "ch1":[0,-1,0], "ch2":[0,0,0], "ch3":[-1,0,1] })

new_df = pd.DataFrame()

min_ch = 1
max_ch = 3
for i in range(min_ch,max_ch+1):
    this_ch_str = "ch"+str(i)
    temp_df = df1[["ID",this_ch_str]].copy()
    temp_df["CH"] = i
    temp_df = temp_df.rename(columns={this_ch_str:"val"})
    temp_df = temp_df[["CH","ID","val"]]
    new_df = new_df.append(temp_df)

这有点令人费解,但它完成了工作。

原帖:

我认为“合并”功能可能就是你要找的东西。

这是一个简单的例子:

import pandas as pd
df1 = pd.DataFrame({"ID":[1,2,3,4,5],"col1":["A","B","C","D","E"]})
df2 = pd.DataFrame({"ID":[1,2,3,4,5,6,7,8,9,10],"col2":["x","y","z","x","y","z","x","y","z","x"]})
df3 = pd.merge(left=df1,right=df2,on="ID",how="left")

存储在df3中的结果如下所示:

   ID col1 col2
0   1    A    x
1   2    B    y
2   3    C    z
3   4    D    x
4   5    E    y

希望这就是你要找的东西!