在 Pandas 中为 DataFrame 中的每一行返回多行

     2023-04-15     16

关键词:

【中文标题】在 Pandas 中为 DataFrame 中的每一行返回多行【英文标题】:Return multiple rows for every row in a DataFrame in Pandas 【发布时间】:2020-04-30 15:41:10 【问题描述】:

这是我想要执行的任务,我有大约 7000 个站点和 50 个类别的列表,每个类别每个月都有一个销售计划。我想将此月度计划转换为每日计划并将其与实际情况进行比较并创建一个 Power BI 视觉对象,为此我需要将计划数据转换为每日计划数据。

这里是示例:

df = pd.DataFrame('ID':[1,2],
                    'Month':[1,1],
                   'Plan':[310,620],
                'Month_start_date': ['2020-01-01','2020-01-01'])
print(df)

df['Month_start_date'] = (pd.to_datetime(df['Month_start_date'], format='%Y/%m/%d')
                     .dt.to_period('m').dt.to_timestamp())

df = df.set_index('Month_start_date')

现在我想在每一行上应用的函数返回更多的行数,这里是一个示例:

start = '2020-01-01'
end = '2020-01-05'
dates = pd.date_range(start, end, freq='D')
dates

df= df.reindex(dates,method = 'ffill')

这会返回一个错误,因为索引有重复的值

ValueError: cannot reindex a non-unique index with a method or limit

这是我想要的输出

            ID  Month  Plan
2020-01-01   1      1   310
2020-01-02   1      1   310
2020-01-03   1      1   310
2020-01-04   1      1   310
2020-01-05   1      1   310
2020-01-01   2      1   620
2020-01-02   2      1   620
2020-01-03   2      1   620
2020-01-04   2      1   620
2020-01-05   2      1   620

由于我必须运行它的组合数量约为 800K,实际上在循环上运行它(使用 .iterrows() )需要永远完成并且似乎效率很低。

还尝试使用 .groupby.apply() 函数。但它不允许我为每一行返回一个数据框(表 df)。

改进此过程所需的建议。

【问题讨论】:

但是您真的需要create fake daily numbers from spreading the monthly data over .index.daysinmonth,从而在没有任何额外信息的情况下创建 30 倍以上的记录吗?为什么不直接使用 /daysinmonth 呢?除非您向我们展示您需要这样做的理由,否则我认为您不需要它,并且它可以使您的数据框保持紧凑。向我们展示您正在执行的最终计算,不要只是说“我需要在我的表中创建数千个重复行” 当然@smci。我会根据您的建议编辑问题 请。向我们展示此代码出现的更高上下文。否则我们就瞎了眼。 我已尝试将业务上下文添加到问题中。请让我知道你的想法。 很抱歉,但 “我想将此月度计划转换为每日报告。” 将您的数据复制 30 倍似乎不是一个令人信服的理由。如果您的所有代码所做的只是将每月总数除以该月的天数(并且您永远不会有任何实际的真实每日数据),那么为什么不能只显示分子和分母呢? (顺便说一句,您真的想将 1/7 分配到包括周六和周日在内的每一天?而不是像每个工作日或每个非节假日工作日的 1/5?) 【参考方案1】:

sort_values() 函数有望实现您的目标:

df.sort_values(by=df.index, inplace =True)

或者,如果您的日期有一个列名,您只需将其更改为 df 的列名,您甚至可以将其与 groupby 配对,以便为某些排序组创建数据框,因为您的数据集非常大。我希望这会有所帮助!

【讨论】:

感谢您回答 Marcos,我收到此错误。 KeyError: DatetimeIndex(['2020-01-01', '2020-01-01'], dtype='datetime64[ns]', name='Month_start_date', freq=None) - 基本上是检查重复错误。另外,我不明白解决方案,你能再解释一下吗?

如何将 DataFrame 中的每一行/单元格值转换为 pandas 中的字典列表?

】如何将DataFrame中的每一行/单元格值转换为pandas中的字典列表?【英文标题】:Howtoconverteachrow/cellvaluesfromaDataFrametoalistofdictionariesinpandas?【发布时间】:2022-01-1902:04:14【问题描述】:我在下面有一个熊猫数据框:df_input=pd.DataFrame... 查看详情

如何在 pandas.DataFrame.plot() 中为标题设置字体大小?

】如何在pandas.DataFrame.plot()中为标题设置字体大小?【英文标题】:Howtosetfontsizefortitleinpandas.DataFrame.plot()?【发布时间】:2021-04-0807:54:59【问题描述】:importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.rand(3,3),columns=[\'A\',\'B\',\'C\' 查看详情

在 Pandas 中为列名包含模式的多列过滤 DataFrame

】在Pandas中为列名包含模式的多列过滤DataFrame【英文标题】:FilteringDataFramesinPandasformultiplecolumnswhereacolumnnamecontainsapattern【发布时间】:2017-01-1320:53:45【问题描述】:在过滤多个列时,我看到了一些示例,我们可以使用类似df[df[\... 查看详情

在 Pandas Dataframe 中为字符串添加前导零

】在PandasDataframe中为字符串添加前导零【英文标题】:AddLeadingZerostoStringsinPandasDataframe【发布时间】:2014-07-1305:30:21【问题描述】:我有一个pandas数据框,其中前3列是字符串:IDtext1text202345656blahblah13456blahblah2541304blahblah3201306hiblah... 查看详情

如何在 PySpark 中为一个组迭代 Dataframe / RDD 的每一行。?

】如何在PySpark中为一个组迭代Dataframe/RDD的每一行。?【英文标题】:HowtoiterateovereachrowofanDataframe/RDDinPySparkforagroup.?【发布时间】:2017-01-3006:07:53【问题描述】:我想根据组的前一行中该列的值设置列的值。然后这个更新后的值... 查看详情

在 Pandas 中为日期添加月份

...以便我可以使用它来查找范围。这是我尝试过的:#createdataframedf=pd.DataFrame([pd.Timestamp(\'20161011\'),pd.Timestamp(\'201611 查看详情

将 uuid 添加到 pandas DataFrame 中的新列

】将uuid添加到pandasDataFrame中的新列【英文标题】:AdduuidtoanewcolumninapandasDataFrame【发布时间】:2018-07-2723:12:18【问题描述】:我希望在pandasDataFrame的单个新列中为每一行添加一个uuid。这显然用相同的uuid填充列:importuuidimportpandasa... 查看详情

为啥pandas.DataFrame.sum(axis=0) 在axis = 0代表行的每一列中返回值的总和?

】为啥pandas.DataFrame.sum(axis=0)在axis=0代表行的每一列中返回值的总和?【英文标题】:whypandas.DataFrame.sum(axis=0)returnssumofvaluesineachcolumnwhereaxis=0representrows?为什么pandas.DataFrame.sum(axis=0)在axis=0代表行的每一列中返回值的总和?【发布... 查看详情

如何使用 DataFrame 中的每一行来过滤查询

】如何使用DataFrame中的每一行来过滤查询【英文标题】:HowtouseeveryrowinaDataFrametofilteraquery【发布时间】:2020-02-2720:06:38【问题描述】:我遇到了无法解决的问题。我有一个像这样的Pandas数据框:LastNameFirstNameGoals0MessiLionel101DonovanL... 查看详情

使用另一个 pandas DataFrame 更新存储在 Pytable 中的 pandas DataFrame

】使用另一个pandasDataFrame更新存储在Pytable中的pandasDataFrame【英文标题】:UpdatepandasDataFrameinstoredinaPytablewithanotherpandasDataFrame【发布时间】:2013-06-0522:30:42【问题描述】:我正在尝试创建一个函数,该函数使用来自pandasDataFrame的新... 查看详情

Pandas DataFrame 图:从 MultiIndex 中为 secondary_y 指定列

】PandasDataFrame图:从MultiIndex中为secondary_y指定列【英文标题】:PandasDataFrameplot:specifycolumnfromMultiIndexforsecondary_y【发布时间】:2018-11-0203:40:49【问题描述】:我正在绘制一个多索引列DataFrame。使用pandasDataFrame的.plot方法指定要在sec... 查看详情

将一个 pandas DataFrame 的副本合并到另一个 DataFrame 的每一行中?

】将一个pandasDataFrame的副本合并到另一个DataFrame的每一行中?【英文标题】:MergeacopyofonepandasDataFrameintoeveryrowofanotherDataFrame?【发布时间】:2019-12-2906:08:10【问题描述】:我有一个场景,我想通过将另一个较小的表合并到数据帧... 查看详情

如何在 Pandas 中遍历 DataFrame 中的行

】如何在Pandas中遍历DataFrame中的行【英文标题】:HowtoiterateoverrowsinaDataFrameinPandas【发布时间】:2012-05-3013:09:39【问题描述】:我有一个来自Pandas的DataFrame:importpandasaspdinp=[\'c1\':10,\'c2\':100,\'c1\':11,\'c2\':110,\'c1\':12,\'c2\':120]df=pd.Dat 查看详情

如何在 Pandas 中遍历 DataFrame 中的行

】如何在Pandas中遍历DataFrame中的行【英文标题】:HowtoiterateoverrowsinaDataFrameinPandas【发布时间】:2013-05-0419:45:20【问题描述】:我有一个来自Pandas的DataFrame:importpandasaspdinp=[\'c1\':10,\'c2\':100,\'c1\':11,\'c2\':110,\'c1\':12,\'c2\':120]df=pd.Dat 查看详情

Pandas DataFrame 中的正则表达式 - 查找字符之间的最小长度

】PandasDataFrame中的正则表达式-查找字符之间的最小长度【英文标题】:RegexwithinPandasDataFrame-findingminimumlengthbetweencharacters【发布时间】:2021-03-1109:07:39【问题描述】:编辑:为重现性而更新我目前在PandasDataFrame中工作,列[ColumnA]... 查看详情

如何在pandasdataframe中为新列添加值?(代码片段)

...后将另一个值添加到同一列:就像是:importpandasdf=pandas.DataFrame()df['Newcolumn'].append('a')df['Newcolumn'].append('b')df['Newcolumn'].append('c')etc.我怎么做?答案不要这样做,becauseslow:6)一次更新空帧a-single-row。我见过这种方法过于使用了WAY... 查看详情

Pandas - 在 DataFrame 中的任何位置查找值索引

】Pandas-在DataFrame中的任何位置查找值索引【英文标题】:Pandas-findindexofvalueanywhereinDataFrame【发布时间】:2017-07-1205:10:16【问题描述】:我是Python和Pandas的新手。我想在我的pandas数据框中找到某个值的索引(比如说security_id),因... 查看详情

将 pandas DataFrame 的每一行转换为单独的 Json 字符串

】将pandasDataFrame的每一行转换为单独的Json字符串【英文标题】:ConverteachrowofpandasDataFrametoaseparateJsonstring【发布时间】:2018-03-3113:46:47【问题描述】:我使用此代码将熊猫DataFramedf的每一行转换为Json字符串。问题是它正在打印None... 查看详情