【问题标题】:Increase the values in a column values based on values in other column in pandas根据熊猫中其他列中的值增加列值中的值
【发布时间】:2022-02-03 17:11:27
【问题描述】:

我的源数据格式为 csv 文件,如下所示:

id,col1,col2                
123,11|22|33||||||,val1|val3|val2           
456,99||77|||88|||||||||6|,val4|val5|val6|val7

我需要添加一个新列(fnlsrc),它的值将基于 Col2 和 Col1 中的值,即如果 col1 有 9 个值(用管道分隔),而 col2 有 3 个值(用管道分隔),那么在fnlsrc 列我必须加载 9 个值(用管道分隔) 3 组 col2(val1|val3|val2|val1|val3|val2|val1|val3|val2)。请参考下面的输出,这将有助于轻松理解需求:

id,col1,col2,fnlsrc
123,11|22|33||||||,val1|val3|val2,val1|val3|val2|val1|val3|val2|val1|val3|val2
456,99||77|||88|||||||||6|,val4|val5|val6|val7,val4|val5|val6|val7|val4|val5|val6|val7|val4|val5|val6|val7|val4|val5|val6|val7

我尝试了以下代码,但它只添加了一组:

zipped = zip(df['col1'], df['col2'])
for s,t in zipped:
    count = int((s.count('|') + 1)/(t.count('|') + 1))
    for val in range(count):
        df['fnlsrc'] = t

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    由于新列基于其他两个,我将使用 panda 的 apply() 函数。我定义了一个函数,它根据其他两列计算新列的值,然后将其应用于每一行:

    def new_value(x):
        # Find out number of values in both columns
        col1_numbers = x['col1'].count('|') + 1
        col2_numbers = x['col2'].count('|') + 1
        
        # Calculate how many times col2 should appear in the new column
        repetition = int(col1_numbers/col2_numbers)
    
        # Create list of strings containing the values of the new column
        values = [x['col2']]*repetition
    
        # Join the list of strings with pipes
        return '|'.join(values)
    
    # Apply the function on every row
    df['fnlsrc'] = df.apply(lambda x:new_value(x), axis=1)
    df
    

    输出:

    id  col1    col2    fnlsrc
    0   123 11|22|33||||||  val1|val3|val2  val1|val3|val2|val1|val3|val2|val1|val3|val2
    1   456 99||77|||88|||||||||6|  val4|val5|val6|val7 val4|val5|val6|val7|val4|val5|val6|val7|val4|v...
    

    输入格式的完整输出:

    id,col1,col2,fnlsrc
    123,11|22|33||||||,val1|val3|val2,val1|val3|val2|val1|val3|val2|val1|val3|val2
    456,99||77|||88|||||||||6|,val4|val5|val6|val7,val4|val5|val6|val7|val4|val5|val6|val7|val4|val5|val6|val7|val4|val5|val6|val7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 2023-01-03
      • 2020-07-12
      • 1970-01-01
      • 2023-01-24
      • 2018-10-15
      • 2023-01-11
      相关资源
      最近更新 更多