熊猫:展平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]
然后分类