【问题标题】:Randomize two csv files but with the indexes in the same order随机化两个 csv 文件,但索引顺序相同
【发布时间】:2021-12-31 10:50:05
【问题描述】:

我有两个 csv 文件,其中包含多个包含文本的列。它们都有相同的文本,但使用不同的语言。因此,例如 csv1 看起来像:

header1               header2
How are you           Good
What day is it        Friday
Whats your name       Mary

而 csv2 将是:

header1               header2
Qué tal estás         Bien
Qué dia es            Viernes
Cómo te llamas        María

现在我想将它们都随机化,但我需要翻译仍然保持相同的顺序。换句话说,我需要索引的顺序相同:如果索引 1 被随机化为 csv1 中的最后一个,我希望 csv2 的顺序相同:

header1               header2
What day is it        Friday
Whats your name       Mary
How are you           Good


header1               header2
Qué dia es            Viernes
Cómo te llamas        María
Qué tal estás         Bien

这就是我所做的:

import pandas as pd

df = pd.read_csv('train.csv')

data = df.sample(frac=1)

但是,使用此代码后,两个 csv 文件的顺序不同。有没有办法随机化文件但固定索引的顺序?

如果没有很好地解释,我深表歉意,这是我第一次在这个网站和编码中。

【问题讨论】:

    标签: python pandas dataframe csv random


    【解决方案1】:
    df1_shuff = df1.sample(frac=1)
    df2_shuff = df2.reindex(df1_shuff.index)
    

    假设两个 dfs 以相同的常规 RangeIndex 开头(您在像 OP 一样执行 pd.read_csv() 时得到),那么两个 df_shuff 都以相同的方式洗牌。

    我要补充一点,在 OP 代码之后唯一需要的附加行是(假设另一个 df 被命名为 df2,但根据需要替换):

    data2 = df2.resample(data.index)
    

    【讨论】:

    • 您的假设应该是它们共享相同的确切索引; RangeIndex 与否无关。
    • ...还有索引假设的唯一性。 iloc way 不会受到这两种情况的影响,所以我会重新考虑“完全正确”这个短语。
    • RangeIndex 是您在以 OP 的方式读取 csv 时获得的索引。这不会使您的答案不正确。这只是获得相同结果的不同方式,并遵循 OP 已经采取的步骤。
    猜你喜欢
    • 2020-12-10
    • 2014-04-08
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2013-08-25
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多