Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将输出变量拆分为大小相似的数据帧并合并这些数据帧_Python_Pandas_Gurobi - Fatal编程技术网

Python 将输出变量拆分为大小相似的数据帧并合并这些数据帧

Python 将输出变量拆分为大小相似的数据帧并合并这些数据帧,python,pandas,gurobi,Python,Pandas,Gurobi,我的问题是:试图将一个输出变量拆分成大小相似的数据帧,然后合并这些数据帧 模型输出:“var” 3) 使用k,这是列数-在本例中为4-->0,1,2,3 df_Product1 = df_listing.iloc[:, 0*k:1*k] df_Product1.columns = list(range(k)) df_Product2 = df_listing.iloc[:, 1*k:2*k] df_Product2.columns = list(range(k)) df_Product3 = d

我的问题是:试图将一个输出变量拆分成大小相似的数据帧,然后合并这些数据帧

模型输出:“var”

3) 使用k,这是列数-在本例中为4-->0,1,2,3

df_Product1 = df_listing.iloc[:, 0*k:1*k]
df_Product1.columns = list(range(k))
df_Product2 = df_listing.iloc[:, 1*k:2*k]
df_Product2.columns = list(range(k))
df_Product3 = df_listing.iloc[:, 2*k:3*k]
df_Product3.columns = list(range(k))
4) 连接三个数据帧

input = [df_Product1, df_Product2, df_Product3]
df_facingsProductAll = pd.concat(input)
我的尝试是非常手动的,因此我正在寻找a)一个更自动化的解决方案,可能使用for循环,b)有一个更动态代码,以便输入更多产品,例如5个产品


谢谢你们的帮助,朋友们

以下是示例数据的简短版本:

import pandas as pd
df = pd.DataFrame({'product': [('Product 1' , 0), ('Product 1', 1) , ('Product 2', 0), ('Product 2', 1)],
                   'listing': [1.0, 0.0, 1.0, 0.0]})
df
然后重置索引列以从“索引”中拆分产品名称

df['prod_indx'] = df['product'].apply(lambda x: x[1])
df['product'] = df['product'].apply(lambda x: x[0])

然后转动

output = pd.pivot_table(df, values='listing', columns='prod_indx', index='product', aggfunc=sum)
print(output)

您可以从这里尝试

将熊猫作为pd导入
从io导入StringIO
txt=”“”
表册
(产品1,0)1.0
(产品1,1)0.0
(产品1,2)0.0
(产品1,3)0.0
(产品2,0)1.0
(产品2,1)0.0
(产品2,2)0.0
(产品2,3)0.0
(产品3,0)0.0
(产品3,1)0.0
(产品3,2)0.0
(产品3,3)1.0“”
df=pd.read\u csv(StringIO(txt),delim\u whitespace=True)
df=df.reset_index()
#拆分索引和concat到df
df=局部混凝土([df,
pd.DataFrame(df[“index”].str.split(“,”)\
.values.tolist(),
列=[“a”,“b”])],
轴=1)
df=df.下降(“指数”,轴=1)
#拆下支架
df[“a”]=df[“a”].str[1:]
df[“b”]=df[“b”].str[:-1].aType(int)
out=局部放电枢轴试验台(df,
index=“a”,
columns=“b”,
values=“listing”)
输出

B0123
A.
产品1 1.0 0.0.0.0.0
产品2 1.0 0.0.0.0
产品3 0.0 0.0 0.0 1.0
更新

如果您的空格为
(Product1,0)
,则可以按以下步骤处理:

txt=”“”
表册
(产品1,0)1.0
(产品1,1)0.0
(产品1、2)0.0
(产品1、3)0.0
(产品2,0)1.0
(产品2,1)0.0
(产品2,2)0.0
(产品2、3)0.0
(产品3,0)0.0
(产品3,1)0.0
(产品3,2)0.0
(产品3,3)1.0“
df=pd.read\u csv(StringIO(txt),delim\u whitespace=True)
df=df.reset_index()\
.rename(列={“级别0”:“a”,
“1级”:“b”})
#拆下支架
df[“a”]=df[“a”].str[1:-1]
df[“b”]=df[“b”].str[:-1].aType(int)

它看起来像一个你可以使用
pd.pivot\u表的组合。我认为你想要的答案是
reset\u index
和使用
(Product1,0)
类型条目重新格式化列,然后使用
pivot\u表
为每个产品创建一行。您能否使用.to_dict()
df\u listing.to_dict()
向用户显示您的输入数据帧,并粘贴此问题中的输出。谢谢。我不知道为什么在数据帧索引中使用元组而不是多重索引。你能展示一下用来生成这个数据帧的代码吗?@ScottBoston刚刚做了,希望它有意义!非常感谢@rpanai我还有一个问题:我的索引有一个空格,也就是说,它的形式是:'(Product1,0)1.0',而不是:'(Product1,0)1.0',只需在str中添加一个空格。不幸的是,拆分(“,”)没有帮助。你会怎么做?@mucsp90检查更新后的答案,如果你愿意,最终投票。
input = [df_Product1, df_Product2, df_Product3]
df_facingsProductAll = pd.concat(input)
import pandas as pd
df = pd.DataFrame({'product': [('Product 1' , 0), ('Product 1', 1) , ('Product 2', 0), ('Product 2', 1)],
                   'listing': [1.0, 0.0, 1.0, 0.0]})
df
df['prod_indx'] = df['product'].apply(lambda x: x[1])
df['product'] = df['product'].apply(lambda x: x[0])
output = pd.pivot_table(df, values='listing', columns='prod_indx', index='product', aggfunc=sum)
print(output)