[英]combine multiple pandas DataFrames
我有多個具有相同格式的 DataFrame。 我想創建一個結合以前的 dataframe 。 結果 dataframe 的每一行都是先前數據幀之一的行,其中某一列是最大值,
例子
data1 :
Name Age
0 michael 18
1 lincoln 20
2 theodore 84
3 alexandre 95
data2 :
Name Age
0 sayed 17
1 hurley 29
2 sawyer 44
3 John 15
data3 :
Name Age
0 walter 50
1 jesse 15
2 fring 20
3 saul 34
預期的結果是:
Results :
Name Age
0 walter 50
1 hurley 29
2 theodore 84
3 alexandre 95
我有超過 500.000 行和 51 列我正在尋找比解析所有數據更快的東西(O(n2) 的復雜性是如此之大)
謝謝你。
您可以使用np.where
選擇數據框列之間的最大值。 然后將此應用於 dataframe 的所有列。 最后使用reduce()
應用於所有數據幀。
import functools
columns = df_.columns
df_ = pd.DataFrame(columns=columns)
def choose_larger(df1, df2):
m = df1['Age'] > df2['Age']
for col in columns:
df_[col] = np.where(m, df1[col], df2[col])
return df_
# Another possible function
def choose_larger2(df1, df2):
m = df1['Age'] > df2['Age']
m = pd.concat([m]*len(columns), axis=1)
return pd.DataFrame(np.where(m, df1, df2), columns=columns)
df_max = functools.reduce(lambda df1, df2: choose_larger(df1, df2), [data1, data2, data3])
print(df_max)
Name Age
0 michael 18
1 lincoln 20
2 theodore 84
3 alexandre 95
如果您水平堆疊數據框:
dfs = [df.add_suffix(index) for index, df in enumerate([data1, data2, data3])]
df = pd.concat(dfs, axis=1)
您可以使用idxmax()
查找每行最大Age
的列indexes
:
indexes = df.filter(like='Age').idxmax(axis=1)
然后indexes
將給出每個 max Age
並且shift()
將給出每個對應的Name
:
pd.DataFrame({'Name': np.diag(df.shift(axis=1)[indexes]), 'Age': np.diag(df[indexes])})
# Name Age
# 0 walter 50
# 1 hurley 29
# 2 theodore 84
# 3 alexandre 95
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.