【问题标题】:How to select rows based on dynamic column value?如何根据动态列值选择行?
【发布时间】:2022-06-20 06:43:52
【问题描述】:

首先,我有以下数据框 df_A

sector SALES EBIT DPS
IT xxxx yyyy zzz
ENERGY xxxx yyyy zzz
FINANCE xxxx yyyy zzz
CONSUMER xxxx yyyy zzz

和另一个数据框df_B

NAME sector SALES EBIT DPS
AAPL IT xxxx yyyy zzz
BP ENERGY xxxx yyyy zzz
TGT CONSUMER xxxx yyyy zzz
MSFT IT xxxx yyyy zzz
HSBC FINANCE xxxx yyyy zzz
GOOG IT xxxx yyyy zzz
WMT CONSUMER xxxx yyyy zzz
META IT xxxx yyyy zzz
CVX ENERGY xxxx yyyy zzz
JPM FINANCE xxxx yyyy zzz
MCD CONSUMER xxxx yyyy zzz

等等

这只是一个例子,我有一个比这更大的数据框

我想要做的是通过区分 df_B 的扇区来创建新的数据帧;

其中新创建的数据帧遵循 df_A["sectors"] 的顺序

最后将它们完全合并,希望是水平格式

所以最后我希望我的输出看起来像

NAME sector SALES EBIT DPS NAME sector SALES EBIT DPS NAME sector SALES EBIT DPS NAME sector SALES EBIT DPS
AAPL IT xxxx yyyy zzz BP ENERGY xxxx yyyy zzz HSBC FINANCE xxxx yyyy zzz WMT CONSUMER xxxx yyyy zzz
MSFT IT xxxx yyyy zzz CVX ENERGY xxxx yyyy zzz JPM FINANCE xxxx yyyy zzz TGT CONSUMER xxxx yyyy zzz
GOOG IT xxxx yyyy zzz NA NA NA NA NA NA NA NA NA NA MCD CONSUMER xxxx yyyy zzz
META IT xxxx yyyy zzz

如果上面的水平格式不起作用,垂直表格也可以

我是 python 中的菜鸟,我尝试使用 for 循环、字典、loc/iloc,但不知何故我的代码都没有正常工作......

非常感谢任何帮助

【问题讨论】:

标签: python pandas loops pandas-loc


【解决方案1】:

创建 N 个数据帧,每个扇区一个,然后将它们连接成一个:

out = pd.concat([pd.DataFrame(df_B[df_B['sector'] == sector].to_dict('records'))
                    for sector in df_A['sector'].unique().tolist()], axis=1)
print(out)

# Output
   NAME sector SALES  EBIT  DPS NAME  sector SALES  EBIT  DPS  NAME   sector SALES  EBIT  DPS NAME    sector SALES  EBIT  DPS
0  AAPL     IT  xxxx  yyyy  zzz   BP  ENERGY  xxxx  yyyy  zzz  HSBC  FINANCE  xxxx  yyyy  zzz  TGT  CONSUMER  xxxx  yyyy  zzz
1  MSFT     IT  xxxx  yyyy  zzz  CVX  ENERGY  xxxx  yyyy  zzz   JPM  FINANCE  xxxx  yyyy  zzz  WMT  CONSUMER  xxxx  yyyy  zzz
2  GOOG     IT  xxxx  yyyy  zzz  NaN     NaN   NaN   NaN  NaN   NaN      NaN   NaN   NaN  NaN  MCD  CONSUMER  xxxx  yyyy  zzz
3  META     IT  xxxx  yyyy  zzz  NaN     NaN   NaN   NaN  NaN   NaN      NaN   NaN   NaN  NaN  NaN       NaN   NaN   NaN  NaN

【讨论】:

  • 终于!!我知道了!非常感谢!
猜你喜欢
  • 2014-02-10
  • 2019-07-25
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多