python熊猫数据框填充例如填充,填充

时间:2020-05-12 08:19:36

标签: python pandas dataframe

我在填写非常大的数据框时遇到两个问题。图片的一部分。我希望将E和F中的1000拉低至26,并且不再进一步。以同样的方式,我希望将2000向上拉到-1,再向下拉到下一个26。我以为我可以通过填充和填充来做到这一点,但是不幸的是,我不知道如何...(picture1) enter image description here

另一个问题是,出现的列中的值从-1到26在E和F中不包含任何值。如何删除或用0填充它们,以使bfill或ffill不会在其中输入错误? (图片2) enter image description here

import pandas as pd
import numpy as np

data = '/Users/Hanna/Desktop/Coding/Code.csv'


df_1 = pd.read_csv(data,usecols=["A",
                           "B",
                           "C",
                           "D",
                           "E",
                           "F",
                           ],nrows=75)


base_list =[-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
df_c = pd.MultiIndex.from_product([
[4000074],
["SP000796746","SP001811642"],
[201824, 201828, 201832, 201835, 201837, 201839, 201845, 201850, 201910, 201918, 201922, 201926, 201909, 201916, 201918, 201920],
base_list],

names=["A", "B", "C", "D"]).to_frame(index=False)
df_3 = pd.merge(df_c, df_1, how='outer')

为了更好地理解它,我将示例简化了一点。图3显示了填充时的外观,图4显示了正确填充的情况 enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

可以找到您拥有-1的索引,然后对要填充的列进行切片/循环。

仅创建示例数据:

import pandas as pd
df = pd.DataFrame(columns=list('ABE'))
df['A']=list(range(-1, 26)) * 10

在每个部分添加随机值

import random 

for i in df.index:
    if i%27 == 0:
        df.loc[i,'B'] = random.random()
    else:
        df.loc[i, 'B'] = 0

找到要分割的索引

indx = df[df['A'] == -1].index.values

在“ E”列中填写数据

for i, j in zip(indx[:-1], indx[1:]):
    df.loc[i:j-1, 'E'] = df.loc[i:j-1, 'B'].max()

    if j == indx[-1]:
        df.loc[j:, 'E'] = df.loc[j:, 'B'].max()

答案 1 :(得分:0)

假设您必须查找并填充特定细分的值。

data = pd.read_csv('/Users/Hanna/Desktop/Coding/Code.csv')    
for i in range(0,data.shape[0],27):
        if i+27 < data.shape[0]:
            data.loc[i:i+27,'E'] = max(data['E'].iloc[i:i+27])
        else:
            data.loc[i:data.shape[0],'E'] = max(data['E'].iloc[i:data.shape[0]])

您可以将max替换为所需的任何内容。