【发布时间】:2020-08-31 02:43:37
【问题描述】:
我在填充数据框时遇到问题。 这是初始情况(图1)
因此,如果从 -1 到 4 的行为空,则它应该为空。但如果有数字则应填写“0”
我的代码看起来像这样...
import pandas as pd
df = pd.read_csv('/Users/Hanna/Code/ZERO.csv')
indx = df[df['D'] == -1].index.values
for i, j in zip(indx[:-1], indx[1:]):
df.loc[i:j-1, 'E'] = df.loc[i:j-1, 'E'].fillna(0)
if j == indx[-1]:
df.loc[j:, 'E'] = df.loc[j:, 'E'].fillna(0)
那是我的代码,但我不确定'NaN'
d = { 'A':[4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074,4000074],“B “:[SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746,SP000796746], 'C':[-1,0, 1, 2, 3, 4, -1, 0, 1, 2, 3, 4, -1, 0, 1, 2, 3, 4, -1, 0, 1, 2, 3, 4], 'D ': [0, 1000, 1000, 0, 0, 0, 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 0, 0, 0, 3000, 3000, 0 ], 'E': [2000, 2000, 2000, 2000, 2000, 2000, 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 4000, 4000, 4000, 4000 , 4000, 4000]}
谢谢你,汉娜
也许它不起作用,因为我以前这样做过,另一列 F:
indx = df[df['Diff Load Due Week'] == -1].index.values
for i, j in zip(indx[:-1], indx[1:]):
df.loc[i:j-1, 'F'] = df.loc[i:j-1, 'F'].max()
if j == indx[-1]:
df.loc[j:, 'F'] = df.loc[j:, 'F'].max()
可以,我必须先删除索引吗?
这是我最后的输出:
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)
# Verbinden der neuen Liste und der kleinen Rohdatenliste
df_3 = pd.merge(df_c, df_1, how='outer')
# Zusammengefügte Daten in Excel und csv speichern für Überprüfung und Weiterarbeit
df_3.to_csv('GROß.csv')
df_3.to_excel('GROß.xlsx')
Einlesen der neu erstellten csv
df = pd.read_csv('/Users/Hanna/Desktop/Daten Projektseminar/Coding/GROß.csv')
#Index setzen für -1, damit Spalten und Reihen aufgefüllt werden können
indx = df[df['D'] == -1].index.values
#Aufüllen der Billings mit maximalen Wert
for i, j in zip(indx[:-1], indx[1:]):
df.loc[i:j-1, 'F'] = df.loc[i:j-1, 'F'].max()
if j == indx[-1]:
df.loc[j:, 'F'] = df.loc[j:, 'F'].max()
【问题讨论】:
-
请将您的数据以文本而非图片的形式提供。
-
你好,请问怎么用excel做呢?
-
请提供可重复的数据样本
-
您的数据在 pandas 数据框中,只需执行
print(df)并将其复制并粘贴到问题中。 -
我添加了一个列表,希望它适用于这个