Python 基于整型列将数据帧拆分为行

Python 基于整型列将数据帧拆分为行,python,pandas,dataframe,Python,Pandas,Dataframe,这不是一个理想的标题,但我不知道如何更好地描述它 我有一个数据帧(df1),希望在“chicken”列上拆分它,以便: 每只下一个蛋的鸡都会变成一排 没有下蛋的鸡聚集在一个独特的行中 我需要的输出是df2,例如: 在农场“A”中,有5只鸡,其中2只下了一个蛋,因此有2排蛋=“真”且重量=1,1排蛋=“假”且重量=3(3只没有下蛋的鸡) 我想出的代码很混乱,你们能想出一个更干净的方法吗?谢谢 #code to create df1: df1 = pd.DataFrame({'farm':["

这不是一个理想的标题,但我不知道如何更好地描述它

我有一个数据帧(df1),希望在“chicken”列上拆分它,以便:

  • 每只下一个蛋的鸡都会变成一排
  • 没有下蛋的鸡聚集在一个独特的行中
我需要的输出是df2,例如:

在农场“A”中,有5只鸡,其中2只下了一个蛋,因此有2排蛋=“真”且重量=1,1排蛋=“假”且重量=3(3只没有下蛋的鸡)

我想出的代码很混乱,你们能想出一个更干净的方法吗?谢谢

#code to create df1:
df1 = pd.DataFrame({'farm':["A","B","C"],"chicken":[5,10,5],"eggs":[2,3,0]})
df1=df1[["farm","chicken","eggs"]]


#code to transform df1 to df2:
df2 = pd.DataFrame()
for i in df1.index:
    number_of_trues = df1.iloc[i]["eggs"]
    number_of_falses = df1.iloc[i]["chicken"] - number_of_trues
    col_farm = [df1.iloc[i]["farm"]]*(number_of_trues+1)
    col_egg = ["True"]*number_of_trues + ["False"]*1
    col_weight = [1]*number_of_trues + [number_of_falses]
    mini_df = pd.DataFrame({"farm":col_farm,"egg":col_egg,"weight":col_weight})
    df2=df2.append(mini_df)
df2 = df2[["farm","egg","weight"]]
df2

这是一个定制解决方案,通过创建两个不同的子数据帧,然后
concat
将其返回以实现预期的输出。关键方法:


这是一个定制解决方案,通过创建两个不同的子数据帧,然后
concat
将其返回以实现预期的输出。关键方法:


很好的方法,tks@Wen@朱丽叶·马萨迪耶·尤:-)快乐coding@JulienMassardier顺便说一下,你愿意接受这个吗?听起来很公平,TKS再次查看它:“@ Wennice方法,TKS @文!”朱丽叶·马萨迪耶·尤:-)快乐coding@JulienMassardier顺便问一下,你愿意接受这个吗?听起来很公平,TKS再次查看它。
s=pd.DataFrame({'farm':df1.farm.repeat(df1.eggs),'egg':[True]*df1.eggs.sum(),'weight':[1]*df1.eggs.sum()})
t=pd.DataFrame({'farm':df1.farm,'egg':[False]*len(df1.farm),'weight':df1.chicken-df1.eggs})
pd.concat([t,s]).sort_values(['farm','egg'],ascending=[True,False])
Out[847]: 
     egg farm  weight
0   True    A       1
0   True    A       1
0  False    A       3
1   True    B       1
1   True    B       1
1   True    B       1
1  False    B       7
2  False    C       5