我的数据框包含3个温度值和一个目标值。我希望基于目标值在温度上达到最大共现值。 示例数据框:
Index Temp 1 Temp 2 Temp 3 Target
1 62 66 52 0.24
2 62 66 62 0.28
3 50 69 52 0.25
4 62 66 62 0.28
5 50 69 52 0.25
6 62 66 62 0.28
7 62 66 52 0.24
我想要输出表:
temprature target counts
Temp1 Temp2 Temp3 0.24 2
Temp1 Temp2 Temp3 0.28 3
Temp1 Temp2 Temp3 0.25 2
我尝试了交叉表(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.crosstab.html),它给了我所有组合,我只想要最多或多个共现值。因为我的实际数据有数千行和30列。
答案 0 :(得分:0)
您可以使用pivot_table
或crosstab
,最后只需要stack
df.pivot_table(index=['Temp1','Temp2','Temp3'],columns='Target',values='Index',aggfunc='count').stack().reset_index()
Out[1109]:
Temp1 Temp2 Temp3 Target 0
0 50 69 52 0.25 2.0
1 62 66 52 0.24 2.0
2 62 66 62 0.28 3.0
答案 1 :(得分:0)
以下是pd.DataFrame.groupby
的一种方式:
temp_cols = ['Temp1', 'Temp2', 'Temp3']
result = df.groupby('Target', as_index=False)
.agg(dict(**{k: 'max' for k in temp_cols}, **{'Index': 'count'}))
# Target Temp1 Temp2 Temp3 Index
# 0 0.24 62 66 52 2
# 1 0.25 50 69 52 2
# 2 0.28 62 66 62 3
答案 2 :(得分:0)
您可以单独对数据框执行 pivot_table ,并将加入一起执行。
这是我的表现。
`df = pd.DataFrame({'Temp1':[62,62,50,62,50,62,62],
'Temp2':[66,66,69,66,69,66,66],
'Temp3':[52,62,52,62,52,62,52],
'Target':[0.24,0.28,0.25,0.28,0.25,0.28,0.24]})
df1 = pd.pivot_table(df, values=['Target'],
index=['Temp1','Temp2','Temp3']).\
rename(columns={'Target':'target'})
df2 = pd.pivot_table(df,
index=['Temp1','Temp2','Temp3'],
aggfunc='count').rename(columns={'Target':'counts'})
df = df1.join(df2)
print(df)`