【问题标题】:fill dataframe column equally平均填充数据框列
【发布时间】:2017-04-14 17:16:44
【问题描述】:

我有一个如下所示的数据框:

ID    Name
1     Missing
2     Missing
3     Missing
.......

如果 len(df) 与我存储的多个名称(列表或字典)不均匀,我是否可以平均填写列名称(+1)。对于 Ex,如果我有 2 个名字。该列的一半是 Name1,而另一半是 Name2。 我试过了:

for i in (range(len(df)/no_names)):
    counter=0
    df.ix[i]['Name'] = dictionary.values()[0]

但这只会根据我有多少名字填写我的前 N ​​行。

【问题讨论】:

    标签: loops pandas iteration fill


    【解决方案1】:

    你可以使用

    import numpy as np
    N = len(df)
    df['Name'] = np.array(['Name1', 'Name2'])[np.linspace(0,2,N,endpoint=False).astype(int)]
    

    这里的思路是创建一个0和1组成的数组,比如

    In [34]: np.linspace(0,2,11,endpoint=False).astype(int)
    Out[34]: array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1])
    

    现在我们可以使用 NumPy 索引来创建一个包含 'Name1' 和 'Name2' 值的数组:

    In [8]: np.array(['Name1', 'Name2'])[np.linspace(0,2,11,endpoint=False).astype(int)]
    Out[8]: 
    array(['Name1', 'Name1', 'Name1', 'Name1', 'Name1', 'Name1', 'Name2',
           'Name2', 'Name2', 'Name2', 'Name2'], 
          dtype='<U5')
    

    【讨论】:

    • 那位亲爱的先生是了不起的。
    • 使用你的方法 unutbu 我确实有结果,但是在打印数据帧时我得到一个错误:试图在数据帧的切片副本上设置一个值。尝试改用 .loc[row_indexer,col_indexer] = value 添加 iloc 并不能解决它,相反我的打印没有结果
    • 这个警告——我相信它是一个用户警告,而不是一个异常——是说df 是另一个DataFrame 切片的副本。出于谨慎考虑,警告在那里提醒您修改df 可能不会影响原始DataFrame。如果这不是您的意图,您可以忽略 UserWarning。请参阅stackoverflow.com/q/40033471/190597 了解更多信息以及使 UserWarning 静音的方法。
    【解决方案2】:

    我第一次尝试 Python 问题,这绝对不是最有效的解决方案。

    import pandas as pd
    df = pd.DataFrame({'a':[1,4,4,0,4,0,4,0],'b':[2,1,4,0,4,0,4,0]})
    #df
    #Out[76]: 
    #   a  b
    #0  1  2
    #1  4  1
    #2  3  3
    #3  4  4
    #4  0  0
    #5  4  4
    #6  0  0
    #7  4  4
    #8  0  0
    

    根据每列的长度,相应地重复Name1和Name2

    df['new'] = np.repeat(np.array(["A", "B"]), repeats=[round(df.shape[0]/2), df.shape[0]-round(df.shape[0]/2)])
    
    #Out[81]: 
    #   a  b new
    #0  1  2   A
    #1  4  1   A
    #2  3  3   A
    #3  4  4   A
    #4  0  0   B
    #5  4  4   B
    #6  0  0   B
    #7  4  4   B
    #8  0  0   B
    

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 2021-12-07
      • 2021-03-17
      • 2019-01-20
      • 2021-08-17
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多