在创建新列之前组合列并对值进行排序

时间:2018-01-04 05:26:37

标签: python pandas csv sorting

我正在制作一个python脚本,我希望将几列字符串数据组合起来,并在创建新列之前按字母顺序对它们进行排序。为了简化我的例子,这里是我正在处理的数据格式的一个非常简单的例子:

Ingredient 1, Ingredient 2, Ingredient 3, Ingredient Summary
pickles, beef, mayo, beef; mayo; pickles 
sugar, flour, eggs, eggs; flour; sugar

我想要实现的最终产品是一个新的专栏,其中3种成分被组合并按字母顺序排列:

import pandas

CSV_file = pandas.read_csv('ingredients.csv')
df = pandas.DataFram(CSV_file)

df['Ingredient Summary'] = df['Ingredient 1'] + '; ' + df['Ingredient 2']
print(df['Ingredient Summary'])

我刚刚开始学习python两周前的目标是从网站上抓取一些数据并将其组织成一个csv来操作excel。我成功地从网站上抓取数据,但我真的很难修改CSV数据。这是我到目前为止的代码,你可以看到代码目前没有排序我只能弄清楚如何将数据组合成一个新列。

This is how is solve this issue:

//deactivate checkboxes if there is a conflict with scheduling 
$(function() {
    $('[name="js-frameworks"]').change(function() {
        if ($(this).is(':checked')) {
            $('[name="express"]').prop('disabled', true);
        } else if (!$(this).is(':checked')) {
            $('[name="express"]').prop('disabled', false);
        }
    })
});

$(function() {
    $('[name="express"]').change(function() {
        if ($(this).is(':checked')) {
            $('[name="js-frameworks"]').prop('disabled', true);
        } else if (!$(this).is(':checked')) {
            $('[name="js-frameworks"]').prop('disabled', false);
        }
    })
});

....

我希望有人可以指出一个简单的解决方案来实现这一目标。我在这个论坛上看过很多帖子,但是可能还没弄清楚如何做到这一点。

我试图将行转换为列表然后对列表进行排序,然后最终将列表打印为新行。我在这种方法上并不成功,并开始认为我这样做很难,这就是为什么我现在要求别人帮忙。谢谢。

2 个答案:

答案 0 :(得分:0)

阅读您的数据框 -

df = pd.read_csv('file.csv', sep=',\s*', engine='python')
df

  Ingredient 1 Ingredient 2 Ingredient 3
0      pickles         beef         mayo
1        sugar        flour         eggs

致电np.sort,将结果加载到Series,然后致电.str.join -

df['Summary'] = pd.Series(np.sort(df.values, axis=1).tolist()).str.join('; ')
df

0    beef; mayo; pickles
1     eggs; flour; sugar
dtype: object

使用to_csv -

再次保存为CSV
df.to_csv('file.csv')

答案 1 :(得分:0)

def sort_ingredients(row):
    return ';'.join(row.sort_values().tolist())

df['Ingredient Summary'] = df.apply(sort_ingredients, axis=1)