【发布时间】:2022-01-12 20:39:43
【问题描述】:
我有一个DataFrame,它看起来像这个玩具示例:
import pandas as pd
df = np.array([
[20.078,19.679,19.585,19.406,19.37,14.97,13.992,20.122,20.736],
[20.443,19.115,18.918,18.749,18.698,14.638,14.041,21.646,21.456],
[19.723,19.593,19.353,19.175,19.258,15.193,14.354,21.122,21.09],
[19.683,19.393,19.273,18.995,18.95,15.545,14.53,22.465,20.091],
[19.769,19.233,19.083,18.983,18.768,14.978,14.224,21.684,20.314],
[19.908,19.5,19.065,18.838,18.354,13.837,13.016,21.307,21.234]
])
df = pd.DataFrame(df, columns = ['u', 'g', 'r', 'i', 'zmag', 'W1', 'W2', 'NUV', 'FUV'])
我想将列成对组合成减法组合,这就是 sn-p 所做的:
df['FUV_NUV'] = dataset['FUV'] - dataset['NUV']
df['FUV_u'] = df['FUV'] - df['u']
df['u_g'] = df['u'] - df['g']
df['g_r'] = df['g'] - df['r']
df['r_i'] = df['r'] - df['i']
df['i_z'] = df['i'] - df['zmag']
df['z_W1'] = df['zmag'] - df['W1']
df['W1_W2'] = df['W1'] - df['W2']
当然,有一个更好的方法可以做到这一点,我发现了here:
combs = list(chain.from_iterable(combinations(df.columns, i)
for i in range(2, len(df.columns) + 1)))
for cols in combs:
df['_'.join(cols)] = df.loc[:, cols].sum(axis=1)
但是,这会产生所有个组合(例如u+g+W1+W2+...)。
我怎样才能改变它,以便它
- 遍历列以产生最大两列的所有组合(例如:u-g、u-r、u-i、u-zmag...)
- 减法(即不是
sum)?
【问题讨论】:
-
"遍历列以产生最大两列的所有组合" 提示 1:您认为
for i in range(2, len(df.columns) + 1)部分是什么意思?提示 2:查看您引用的页面上问题中的代码。 -
“减法(即不是总和)?”好吧,你试过把
pandas difference of columnsinto a search engine放进去吗?
标签: python arrays pandas iteration