【问题标题】:Assign value to particular cells in pandas DataFrame为 pandas DataFrame 中的特定单元格赋值
【发布时间】:2019-10-13 00:20:48
【问题描述】:

虽然我的数据框有超过 1000 万行和 40 列,但我的数据框在结构上与此类似

df = pd.DataFrame([['a1', 'b1','c1','d1'],
                   ['a2', 'b2','c2','d2'],
                   ['a3', 'b3','c3','d3'],
                   ['a4', 'b4','c4','d4'],
                   ['a5', 'b5','c5','d5'],
                   ['a6', 'b6','c6','d6'],
                   ['a7', 'b7','c7','d7']], columns=['pid','tid','aid','cid'])

我想根据条件创建一个包含 0 和 1 的矩阵,如果列名等于特定行中的值,则值为 1,否则为 0。

我已按如下方式操作数据框:

colnames = df['aid'].append(df['cid'])

df2 = pd.concat([df,pd.DataFrame(columns=colnames)])
df2 = df2.set_index('pid')
df2 = df2.fillna(0)

cols = df2.columns.tolist()
cols = cols[-1:] + cols[:-1]
df2= df2[cols]

这给了我:

    tid aid  c1  c2  c3  c4  c5  c6  c7 cid  d1  d2  d3  d4  d5  d6  d7
pid                                                                    
a1   b1  c1   0   0   0   0   0   0   0  d1   0   0   0   0   0   0   0
a2   b2  c2   0   0   0   0   0   0   0  d2   0   0   0   0   0   0   0
a3   b3  c3   0   0   0   0   0   0   0  d3   0   0   0   0   0   0   0
a4   b4  c4   0   0   0   0   0   0   0  d4   0   0   0   0   0   0   0
a5   b5  c5   0   0   0   0   0   0   0  d5   0   0   0   0   0   0   0
a6   b6  c6   0   0   0   0   0   0   0  d6   0   0   0   0   0   0   0
a7   b7  c7   0   0   0   0   0   0   0  d7   0   0   0   0   0   0   0

如果 'aid' 或 'cid' 中的值等于列名,我现在想将值从 0 更改为 1

我已经尝试了很多类似以下的方法,但都无法正常工作:

df2.loc['aid' == colnames] = 1
df2.loc['cid' == colnames] = 1

我想要的输出是:

    tid aid  c1  c2  c3  c4  c5  c6  c7 cid  d1  d2  d3  d4  d5  d6  d7
pid                                                                    
a1   b1  c1   1   0   0   0   0   0   0  d1   1   0   0   0   0   0   0
a2   b2  c2   0   1   0   0   0   0   0  d2   0   1   0   0   0   0   0
a3   b3  c3   0   0   1   0   0   0   0  d3   0   0   1   0   0   0   0
a4   b4  c4   0   0   0   1   0   0   0  d4   0   0   0   1   0   0   0
a5   b5  c5   0   0   0   0   1   0   0  d5   0   0   0   0   1   0   0
a6   b6  c6   0   0   0   0   0   1   0  d6   0   0   0   0   0   1   0
a7   b7  c7   0   0   0   0   0   0   1  d7   0   0   0   0   0   0   1

我该怎么做?

【问题讨论】:

    标签: python pandas dataframe matrix sparse-matrix


    【解决方案1】:

    在您的情况下,您可以使用get_dummies

    df=pd.get_dummies(df,columns=['pid','aid'],prefix_sep='',prefix='')
    df
      tid cid  a1  a2  a3  a4  a5  a6  a7  c1  c2  c3  c4  c5  c6  c7
    0  b1  d1   1   0   0   0   0   0   0   1   0   0   0   0   0   0
    1  b2  d2   0   1   0   0   0   0   0   0   1   0   0   0   0   0
    2  b3  d3   0   0   1   0   0   0   0   0   0   1   0   0   0   0
    3  b4  d4   0   0   0   1   0   0   0   0   0   0   1   0   0   0
    4  b5  d5   0   0   0   0   1   0   0   0   0   0   0   1   0   0
    5  b6  d6   0   0   0   0   0   1   0   0   0   0   0   0   1   0
    6  b7  d7   0   0   0   0   0   0   1   0   0   0   0   0   0   1
    

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 2012-11-30
      • 2018-10-27
      • 2016-11-30
      • 1970-01-01
      • 2017-08-12
      • 2018-04-22
      • 1970-01-01
      • 2018-04-22
      相关资源
      最近更新 更多