Pandas:基于列名的列中位数
Pandas: Column medians based on column names
我有以下 pandas DataFrame。
df = pd.DataFrame(np.random.randn(3,6), columns=['A1','A2','A3','B1','B2','B3'])
df
A1 A2 A3 B1 B2 B3
0 -0.409420 2.382457 1.151565 0.625461 0.224453 -0.351573
1 -0.676554 -1.485376 0.597227 0.240113 0.033963 1.224241
2 0.678698 1.392778 1.031625 0.388137 -0.566746 -0.798156
如何获得这样的列的中位数
medA medB
0 ... ...
1 ... ...
2 ... ...
我的实际数据框有300列,所以我想通过列名的相似性来区分。
这看起来像 pd.wide_to_long
:
(pd.wide_to_long(df.reset_index(),['A','B'],'index','idx')
.groupby('index').median().add_prefix('med_').rename_axis(None))
或 groupby
第一个字符串 axis=1
df.groupby(df.columns.str[0],axis=1).median().add_prefix('med_')
med_A med_B
0 -0.075465 -0.317335
1 -0.355822 -0.517270
2 0.279270 -1.134389
这是一个 for 循环答案:
dict = {}
dff = pd.DataFrame()
for letter in ['A', 'B']:
dict[letter] = []
for col in df.columns:
if col.startswith(letter):
dict[letter].append(col)
dff[f'med_{letter}'] = df[dict[letter]].median(axis=1)
我不确定你所说的"to differentiate by similarity in column name"是什么意思,这里只是将每个列名的开头与引物列表中的条目进行比较(['A', 'B']
)。
我有以下 pandas DataFrame。
df = pd.DataFrame(np.random.randn(3,6), columns=['A1','A2','A3','B1','B2','B3'])
df
A1 A2 A3 B1 B2 B3
0 -0.409420 2.382457 1.151565 0.625461 0.224453 -0.351573
1 -0.676554 -1.485376 0.597227 0.240113 0.033963 1.224241
2 0.678698 1.392778 1.031625 0.388137 -0.566746 -0.798156
如何获得这样的列的中位数
medA medB
0 ... ...
1 ... ...
2 ... ...
我的实际数据框有300列,所以我想通过列名的相似性来区分。
这看起来像 pd.wide_to_long
:
(pd.wide_to_long(df.reset_index(),['A','B'],'index','idx')
.groupby('index').median().add_prefix('med_').rename_axis(None))
或 groupby
第一个字符串 axis=1
df.groupby(df.columns.str[0],axis=1).median().add_prefix('med_')
med_A med_B
0 -0.075465 -0.317335
1 -0.355822 -0.517270
2 0.279270 -1.134389
这是一个 for 循环答案:
dict = {}
dff = pd.DataFrame()
for letter in ['A', 'B']:
dict[letter] = []
for col in df.columns:
if col.startswith(letter):
dict[letter].append(col)
dff[f'med_{letter}'] = df[dict[letter]].median(axis=1)
我不确定你所说的"to differentiate by similarity in column name"是什么意思,这里只是将每个列名的开头与引物列表中的条目进行比较(['A', 'B']
)。