根据另一个数据框的ID和值在一个数据框上设置值

时间:2020-04-16 11:48:33

标签: python pandas dataframe mapping bigdata

我的数据框有问题。

第一个数据帧如下:


id     0    1    2    3

100    0    0    0    0
101    0    0    0    0
102    0    0    0    0
103    0    0    0    0

第二个数据帧如下:

id     num

100    1
100    2
100    3
101    0
101    3
102    1
103    2
103    3

我想将第一个数据帧中的零更改为列中以“ id”表示的特定行中的零,这些列在第二个数据帧中以特定的“ id”显示在“ num”列中。所以最后我想将第一个数据帧更改为:

id     0    1    2    3

100    0    1    1    1
101    1    0    0    1
102    0    1    0    0
103    0    0    1    1

我该怎么做?我知道我可以使用for循环(我已经准备好了),但是我的数据帧很大,大约需要4个小时才能完成。我当时正在考虑在熊猫中进行地图绘制,但是我没有解决方案。

最诚挚的问候

2 个答案:

答案 0 :(得分:2)

maxsum一起用于指标值,如果需要计数值,请使用max而不是df = pd.get_dummies(df2.set_index('id')['num']).max(level=0) print (df) 0 1 2 3 id 100 0 1 1 1 101 1 0 0 1 102 0 1 0 0 103 0 0 1 1

df = (pd.get_dummies(df.set_index('id')['num']).max(level=0)
        .reindex(index=df1.index, columns=df1.columns, fill_value=0))

如果可能,请在第一个DataFrame中添加更多行或列,并添加get_dummies

const mapDispatchToProps = dispatch => ({
    onSubmitPressed: countryCode => {
      dispatch(createCountry(countryCode));
      dispatch(loadCountry(countryCode));
    }
}); 

答案 1 :(得分:1)

命名第一个数据帧df1和第二个数据帧df2,可以旋转数据帧df2

df2['value'] = 1
df1 = df2.pivot_table(index='id', columns='num', values='value', fill_value=0)

输出:

num  0  1  2  3
id             
100  0  1  1  1
101  1  0  0  1
102  0  1  0  0
103  0  0  1  1