【问题标题】:Element-wise operation of columns in PandasPandas 中列的元素操作
【发布时间】:2020-11-10 03:39:35
【问题描述】:

我想对 Pandas 中三个不同数据帧的三个不同长度的列的元素进行平均。例如:

df_1:

c1 | c2 | c3
0  | 1  | 2
1  | 2  | 3
2  | 3  | 4

df_2:

c1 | c2 | c3
1  | 2  | 3
1  | 2  | 3
1  | 2  | 3

df_3:

c1 | c2 | c3
3  | 2  | 1
1  | 2  | 3
3  | 2  | 1

我想平均 c3 的每个元素,并将其保存在一个新的 df_4 中:

c1 | c2 | c3
3  | 2  | (2+3+1)/3
1  | 2  | (3+3+3)/3
3  | 2  | (4+3+1)/3

我尝试了以下仅返回 NaN 值的方法:

df_1_c3 = df_1.loc[:,'c3']
df_2_c3 = df_2.loc[:,'c3']
df_3_c3 = df_3.loc[:,'c3']


adc_avg = pd.DataFrame((df_1_c3 + df_2_c3 + df_3_c3 )/3)

【问题讨论】:

  • df_4 的 c1,c2 列会和 df_3 一样吗?
  • @IoaTzimas c1、c2 和 c3 的长度会不同。 df_4 中生成的列长度应等于 df_1、df_2 和 df_3 之间 c3 的最长列长度。

标签: python pandas dataframe


【解决方案1】:

尝试以下操作(根据您的描述,我认为 df_4 的 c1、c2 列与 df_3 相同):

df_4=df_3.copy()
df_4['c3']=[sum(i)/3 for i in zip(df_1.c3, df_2.c3, df_3.c3)]

【讨论】:

  • 如果df_1、df_2、df_3的长度不同,这个就不行了。
【解决方案2】:

您可以取 3 列,沿轴 1 制作 df 和均值:

pd.DataFrame({'A': df1['c3'], 'B': df2['c3'],'C': df3['c3']}).mean(axis=1)

【讨论】:

  • 这将返回一个只有一列平均值的数据框。我希望将包含所有其他数据的原始形状转移到 df_4。
猜你喜欢
  • 2016-08-03
  • 2017-07-25
  • 2020-08-17
  • 2013-02-03
  • 1970-01-01
  • 2019-01-05
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多