熊猫:展平csv文件中的重复/包装列

熊猫:展平csv文件中的重复/包装列,csv,pandas,Csv,Pandas,通常情况下,数据将通过包装列提供给您。例如,考虑: CCY Decimals CCY Decimals CCY Decimals AUD/CAD 5 EUR/CZK 4 GBP/NOK 5 AUD/CHF 5 EUR/DKK 5 GBP/NZD 5 AUD/DKK 5 EUR/GBP 5 GBP/

通常情况下,数据将通过包装列提供给您。例如,考虑:

    CCY  Decimals      CCY    Decimals      CCY    Decimals
AUD/CAD         5  EUR/CZK           4  GBP/NOK           5
AUD/CHF         5  EUR/DKK           5  GBP/NZD           5
AUD/DKK         5  EUR/GBP           5  GBP/PLN           5
AUD/JPY         3  EUR/HKD           5  GBP/SEK           5
AUD/NOK         5  EUR/HUF           3  GBP/SGD           5
...
应该将其解析为两列(CCY和小数)的数据帧,而不是六列。我的问题是,实现这一目标最惯用的方式是什么

我想要的东西如下:

data = pd.read_csv("file.csv")
data.groupby(axis=1,by=data.columns.map(lambda s: s.replace("\..",""))).\
    apply(lambda df : df.values.flatten())
读取csv文件时,我们以列
CCY
小数
CCY.1
小数.1
结束。。等。
groupby
操作返回一组数据帧:

<pandas.core.groupby.DataFrameGroupBy object at 0x3a52b10>

然后我们将使用numpy功能将其展平。因此,我们将把具有重复列的数据帧转换成系列,然后将这些数据帧合并成一个结果DF

然而,这不起作用。我尝试将不同的
参数传递给
groupBy
,但它总是抱怨无法重新索引非唯一列


有许多现有的问题涉及到列组的扁平化(例如),但我找不到任何对重复列执行此操作的问题。

要使用
groupby
,我会:

>>> groups = df.groupby(axis=1,by=lambda x: x.rsplit(".",1)[0])
>>> pd.DataFrame({k: v.values.flat for k,v in groups})
        CCY  Decimals
0   AUD/CAD         5
1   EUR/CZK         4
2   GBP/NOK         5
3   AUD/CHF         5
4   EUR/DKK         5
5   GBP/NZD         5
6   AUD/DKK         5
7   EUR/GBP         5
8   GBP/PLN         5
9   AUD/JPY         3
10  EUR/HKD         5
11  GBP/SEK         5
12  AUD/NOK         5
13  EUR/HUF         3
14  GBP/SGD         5

[15 rows x 2 columns]
然后分类