从for循环的输出中创建熊猫数据框

时间:2020-08-03 17:25:13

标签: python pandas dataframe

我有以下循环,该循环根据输入数据帧生成多行:

for _, value in df.iterrows():

    var1 = value['Sales']
    var2 = value['Income']

    seg1 = value['segment']

    flag1 = 'up' if var1>0 else 'down'
    flag2 = 'up' if var2>0 else 'down'

    print(f"{seg1} Sales {flag1} {var1}% vs LY while Total income {flag2} {var2}% vs LY creating leverage")

输出

A Sales up 184.37% vs LY while Total income up 224.24% vs LY creating leverage
B Sales up 45.42% vs LY while Total income up 176.79% vs LY creating leverage

有没有一种方法可以根据上述循环生成的输出行来创建新的数据帧。

预期的输出1:

df:
     String
0    A Sales up 184.37% vs LY while Total income up 224.24% vs LY creating leverage
1    B Sales up 45.42% vs LY while Total income up 176.79% vs LY creating leverage

预期的输出2:

df:
     String
0    A Sales up 184.37% vs LY while Total income up 224.24% vs LY creating leverage; B Sales up 45.42% vs LY while Total income up 176.79% vs LY creating leverage

我尝试了以下方法,但是它不正确或语法错误:

column_names = ['String']
df= pd.DataFrame(columns = column_names)
df= pd.DataFrame({'Insight': c_1}, index=[0])

1 个答案:

答案 0 :(得分:1)

要充实@Cedroc Zoppolo的评论,这里是带有f字符串的最小示例。

    import pandas as pd

    df = pd.DataFrame({'Sales': [10, 20], 'Income': [20, -30]})
    
    def description(sales, income):
        return f'Sales up {sales}% while Total income {"up" if income > 0 else "down"} {income}%'

    df['descr'] = df.apply(lambda x: description(x['Sales'], x['Income']), axis=1)

输出:

   Sales  Income                                      descr
0     10      20     Sales up 10% while Total income up 20%
1     20     -30  Sales up 20% while Total income down -30%