我有两个数据帧df1和df2。df1就像一个具有以下值的字典
Ticker INDUSTRY_SECTOR
TLRA_Equity Communications
KAMN_Equity Industrial
B_Equity Industrial
ARNC_Equity Industrial
RC_Equity Consumer, Non-cyclical
DAR_Equity Consumer, Non-cyclical
df2具有以下值:
Date TLRA_Equity KAMN_Equity B_Equity ARNC_Equity RC_Equity DAR_Equity
1/1/2000 10 20 30 40 50 60
2/1/2000 15 25 35 45 55 65
3/1/2000 17 27 37 47 57 67
我想基于df1数据帧中的INDUSTRY\u SECTOR
,将df2拆分为3个新的数据帧。
通信
数据框预期产出:
>
Date TLRA_Equity
1/1/2000 10
2/1/2000 15
3/1/2000 17
工业
数据帧
Date KAMN_Equity B_Equity ARNC_Equity
1/1/2000 20 30 40
2/1/2000 25 35 45
3/1/2000 27 37 47
消费者,非周期性数据帧
Date RC_Equity DAR_Equity
1/1/2000 50 60
2/1/2000 55 65
3/1/2000 57 67
请让我知道如何有效地做。我想做的是连接列名,例如Communications_TLRA_Equity
,然后根据列名的前半部分分割数据帧。
代码:
col_names = df2.columns.values.tolist()
d_cols = df2.columns.map(df1.set_index('Ticker')['INDUSTRY_SECTOR'].get)
print(d_cols)
df.columns = [d_cols + "_" str(col) for col in df.columns]
for sector, df_sector in df.columns.str.split('_').str[0].tolist():
print(sector)
print(df_sector)
但这很复杂。需要更好的解决方案。
考虑创建一个帧的dicing
,关键是您的'INDUSTRY_SECTOR'名称。
首先创建一个INDUSTRY_SECTOR的判决:滴答栏
g = df1.groupby('INDUSTRY_SECTOR')['Ticker'].apply(list).to_dict()
print(g)
{'Communications': ['TLRA_Equity'], 'Consumer, Non-cyclical': ['RC_Equity', 'DAR_Equity'], 'Industrial': ['KAMN_Equity', 'B_Equity', 'ARNC_Equity']}
然后创建一个听写理解:
frames = {k:df2.set_index('Date')[v] for k,v in g.items()}
print(frames)
{'Communications': TLRA_Equity
Date
1/1/2000 10
2/1/2000 15
3/1/2000 17,
'Consumer, Non-cyclical': RC_Equity DAR_Equity
Date
1/1/2000 50 60
2/1/2000 55 65
3/1/2000 57 67,
'Industrial': KAMN_Equity B_Equity ARNC_Equity
Date
1/1/2000 20 30 40
2/1/2000 25 35 45
3/1/2000 27 37 47}
正如@Parfait所指出的,要包含Date
列,需要将其设置为dict理解中的索引。如果不想将日期作为索引,请使用:
frames = {k:df2.set_index('Date')[v].reset_index() for k,v in g.items()}
您可以使用groupby创建数据帧列表,
dfs = [df2.set_index('Date')[ticker].reset_index() for ticker in df1.groupby('INDUSTRY_SECTOR').Ticker.apply(list)]
dfs[0]
Date TLRA_Equity
0 1/1/2000 10
1 2/1/2000 15
2 3/1/2000 17
dfs[1]
Date RC_Equity DAR_Equity
0 1/1/2000 50 60
1 2/1/2000 55 65
2 3/1/2000 57 67
dfs[2]
Date KAMN_Equity B_Equity ARNC_Equity
0 1/1/2000 20 30 40
1 2/1/2000 25 35 45
2 3/1/2000 27 37 47
我有两个数据帧df1和df2 df1如下 df2就像 我想根据df2中与df1中的列名匹配的单元格值将值从df1复制到df2,所以我的df3应该看起来像 df3 基本上,我想根据df2的单元格值(df1中的列名)从df1复制df2中的列 如果它仍然令人困惑,请告诉我
我正面临这个问题,其中我有一个数据帧,比如: 和另一个数据帧: 现在我想要的是,将df2的列插入到df1的特定位置,这样df1就变成了(实际上一个新的df也会起作用): 我现在通过创建一个新的空df来实现这一点,然后迭代这两个df的列,然后依次添加每一列。这是低效的、丑陋的,并且违背了数据流的全部目的。所以我很想知道,这个已经有方法了吗?我不确定这样的问题是否已经在这里得到了回答,但我肯定我没有找
我有一个像下面这样的DataFrame,标识符作为现有DateIndex顶部的列。 我的目标是为除id之外的每一列(a和B)创建一个新的子DataFrames,其中dateIndex作为单个索引,id(foo,bar)作为列名。预期产出如下所示:
我有一个关于熊猫以及正确索引和替换值的问题。 我有两个数据帧,df1和df2,具有相同的列(Col1、Col2、Col3和Col4)。 在df1中,我想用另一个值(比如100)替换与df2中其他列(Col1、Col2和Col3)的值匹配的行中Col4中的值。 生成的df1看起来像这样: 我试过这样的方法: 但是我得到了错误,我不确定这是否达到了我想要的。
我有两个数据框,都包含英文和中文单词字符串,我想知道其中一个是另一个的子集:
我有两个不同列数和行数的CSV文件。第一个CSV文件有M列和N行,第二个文件有H列和G行。一些列具有相同的名称。 null 另外,如果两个CSV文件有两个数据帧,并希望这样做,例如,如果我将第一个CSV加载到中,将第二个加载到中,然后希望合并到,类似于上面的示例。